배운점
현실에서 부모님이 자식들에게 재산을 물려주는 것과 비슷하며, 자식(하위 클래스)가 상속받고싶은 부모(상위 클래스)를 선택해서 부모 클래스의 필드와 메서드를 물려받는 것. ( 접근 제어자를 통해 상속이 안될 수도 있다.)
중복된 코드를 줄일 수 있으며, 유지 보수가 편리하며, 다형성을 구현할 수 있다.
class A {
String aField = "클래스 A 필드";
public void aMethod() {
System.out.println(aField);
// System.out.println("A : "+ bField); // 컴파일 에러(자식 필드 사용 불가)
}
}
class B extends A {
String bField = "클래스 B 필드";
public void bMethod() {
System.out.println(aField); // 부모 클래스 필드 사용
System.out.println(bField); // 본인 클래스 필드 사용
// System.out.println("B : "+cField); // 컴파일 에러(자식 필드 사용 불가)
}
}
class C extends B {
String cField = "클래스 C 필드";
public void cMethod() {
System.out.println(aField); // 조부모 클래스 필드 사용
System.out.println(bField); // 부모 클래스 필드 사용
System.out.println(cField); // 본인 클래스 필드 사용
}
}
public class SuperSubEx01 {
public static void main(String[] args) {
System.out.println("----------A----------");
A a = new A();
a.aMethod(); // 본인 메소드 사용
// a.bMethod(); // A(부모) 객체로 B(자식) 메소드 접근 불가
System.out.println("----------A----------");
System.out.println("----------B----------");
B b = new B();
b.aMethod(); // 부모 메소드 사용
b.bMethod(); // 본인 메소드 사용
// b.cMethod(); // B(부모) 객체로 C(자식) 메소드 접근 불가
System.out.println("----------B----------");
System.out.println("----------C----------");
C c = new C();
c.aMethod(); // 조부모 메소드 사용
c.bMethod(); // 부모 메소드 사용
c.cMethod(); // 본인 메소드 사용
System.out.println("----------C----------");
}
}
[출처] [JAVA/자바] 상속의 개념 및 부모/자식 클래스|작성자 JOKER
위 코드를 보면 B는 A에게 , C는 B에게 상속 받는다. 그리고 각 메소드에서 상속받은 데이터들을 이용하여 출력한다.
단 부모 클래스는 자식클래에서 정의한 메소드나 필드를 사용하지 못한다.