아래 문제를 보면 B 클래스의 생성자를 이용하여 A 클래스의 객체 변수 b를 생성한다.
main에서 b.paint를 호출하면 A의 paint 메서드를 호출할 거라고 생각하지만,
메서드가 자식클래스에 오버라이딩 되어있기 때문에, 자식 클래스의 메서드가 대신 호출된다.
b.paint() 를 호출하면 B 클래스의 paint() 메서드를 호출하여
BDCD 출력
b.darw() 를 호출하면 마찬가지로 B 클래스의 draw() 메서드를 호출하기 때문에
D 를 출력한다.
결과: BDCDD
public class main{
public static void main(String[] args) {
A b = new B();
b.paint();
b.draw();
}
}
class A {
public void paint() {
System.out.print("A");
draw();
}
public void draw() {
System.out.print("B");
draw();
}
}
class B extends A {
public void paint() {
super.draw();
System.out.print("C");
this.draw();
}
public void draw() {
System.out.print("D");
}
}