[새싹X코딩온] JAVA | 클래스 상속

Sohee Kwon·2024년 1월 23일
post-thumbnail

클래스의 상속

  • 부모 클래스에서 정의된 필드와 메소드를 자식클래스가 물려받는 것

  • Java는 다중 상속을 허용 X -> 부모클래스 오직 하나!

클래스 상속 예시

  • 아래와 같이 클래스를 정의 했을 때, "말하기, 먹기, 걷기, 잠자기" 의 행동을 동일하게 사용함

  • Person이라는 부모클래스를 만들고,
    Student, Researcher, … 클래스에서 상속받도록 하는 것!

상속 문법

  • extends 키워드 사용
public class Person {}

public class Researcher extends Person { // Person을 상속받는 Researcher 선언 }

public class Professor extends Person { // Person을 상속받는 Professor 선언 }

public class Student extends Person { // Person을 상속받는 Student 선언 }

부모 생성자 호출, super()

  • 자식 생성자의 맨 첫줄에 super() 가 숨겨져 있음
    super() 가 컴파일 과정에서 자동으로 추가되면서 부모의 기본 생성자를 호출한다.

  • 만약, 부모 클래스에 기본 생성자가 아닌 매개변수를 갖는 생성자만 있다면 super()에 매개변수를 넣어주어야 함!

    • 자식 클래스 생성자 첫 줄에서 super(매개변수) 사용!

부모, 자식 클래스의 필드가 public 인 경우

  • Person 클래스 (부모)
public class Person{
	public String name;
    public int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("부모 클래스 Person(name, age) 생성자 실행");
    }
}

  • Student 클래스 (자식)
public class Student extends Person{
	 public String campus;
    
    public Student(String name, int age) {
        super(name, age);
        System.out.println("자식 클래스 Student(name, age) 생성자 실행");
}



부모, 자식 클래스의 필드가 private 인 경우

  • Person 클래스 (부모)
public class Person{
	private String name;
    private int age;

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

  • Student 클래스 (자식)
public class Student extends Person{
	 private String campus;

    public Student(String name, int age) {
        setAge(age);
        setName(name);
    }

    public String getCampus() {
        return campus;
    }

    public void setCampus(String campus) {
        this.campus = campus;
        System.out.println(campus + "캠퍼스에서 공부 중");
    }
}

메소드 오버라이딩(Overriding)

  • 부모 클래스의 메소드자식 클래스에서 재정의 하는 것

  • 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모든 것을 동일하게 작성

  • @Override - 컴파일시 정확히 오버라이딩 되었는지 확인하는 어노테이션으로 생략 가능함.

profile
개발자 성장로그

0개의 댓글