A를 B가 상속받았을 때
A와 B가 같은 이름의 변수를 가지고 있는 경우
A→B 상속관계에, A의 int a =10
, B의 int a =20
인 경우
A obj1 = new B();
B obj2 = new B();
이렇게 인스턴스를 생성해주었을 때,
obj1, obj2은 a와 부모에게 상속받은 a를 둘 다 갖고 있다.
이 경우 obj1.a, obj2.a를 각각 출력하면 10, 20이 출력된다.
이유는 obj1은 A클래스로 만들어진 것이고, obj2는 B클래스로 만들어졌기에 해당 클래스에 해당되는 변수를 호출하게 되는 것이다.
이 경우 obj1에서 주의할 것
1. 메서드
- super의 메서드만 사용 가능하다.
- sub만 갖고있는 메서드는 사용 불가하다.
- 이 경우에도 오버라이딩 된 메서드는 오버라이딩이 적용된다.
2. static 메서드
- 여기서 A B 모두에 동일한 이름으로 존재하는 static 메서드의 경우
- 메서드 오버라이딩이 아니라 하이딩(가려버림)이라는 개념이 적용된다.
- A로 생성했으므로 A가 갖고있는 static 메서드를 호출한다.