상속(Inheritance)은 기존 클래스(부모)의 필드와 메서드를 새로운 클래스(자식)가 물려받는 것이다.
자식 클래스가 부모 클래스를 상속할때는 extends 키워드를 사용한다.
// 부모 클래스
class Rectangle {
int width, height;
int getArea() {
return width * height;
}
}
// 자식 클래스 (Rectangle을 상속)
class Square extends Rectangle {
// width, height, getArea()를 모두 사용할 수 있음
}super 키워드
super 키워드를 통해 부모 클래스를 가리킬 수 있다.
super()super.fieldsuper.method()
super를 명시해야 하는 케이스
부모 클래스에 기본 생성자가 없는 경우, 자식 클래스에서 반드시 super를 명시적으로 호출해야 한다.
CAUTION
자식 클래스 생성자에서
super(...)또는this(...)를 명시하지 않으면 컴파일러가 첫 줄에super()를 자동으로 삽입한다. 즉 부모 클래스에 기본생성자가 없는데 자식 클래스 생성자에서 별다른 부모 생성자를 호출하지 않을 경우 컴파일 에러가 발생한다. 또한 자식 클래스는 부모 클래스 생성자를 명시적으로 하지 않았을 경우에는 항상super()가 먼저 호출됨을 기억하자.
필드 하이딩
부모 클래스와 자식 클래스에 같은 이름의 필드가 있으면, 자식의 필드가 부모의 필드를 가린다.
class Parent {
String x = "Parent";
}
class Child extends Parent {
String x = "Child" // 부모의 x를 가림
}필드와 같은 경우는 선언 타입을 기준으로 가져오기에 선언 타입에 따라 결과가 다르다.
System.out.println(p.name); // Parent
System.out.println(child.name); // Child