다형성과 메서드 오버라이딩
public class Parent {
public String value = "parent";
public void method() {
System.out.println("Parent.method");
}
}
public class Child extends Parent {
public String value = "child";
@Override
public void method() {
System.out.println("Child.method");
}
}
- 멤버 변수는 오버라이딩 되지 않으며 메서드만 오버라이딩
- 중요한 것은 오버라이딩 된 메서드가 항상 우선권을 가짐
상세 과정
- child는 Child 타입이므로 value, method() 호출 시 Child 타입에서 기능을 찾아서 실행
- parent는 Parent 타입이므로 value, method() 호출 시 Parent 타입에서 기능을 찾아서 실행
- poly 변수는 parent 타입이므로 value, method() 호출 시 Parent 타입에서 기능을 찾아서 실행
- value : Parent 타입에 있는 value 값을 읽음
- method() : Parent 타입에 있는 method()를 실행하려고 하지만 하위 타입인 Child.method()가 오버라이딩 되어 있음, 이 경우 오버라이딩 된 메서드가 항상 우선권을 가지기 때문에 Parent.method()가 아닌 Child.method()가 실행
- 만약 손자에서도 같은 메서드를 오버라이딩 하는 경우 손자의 오버라이딩 된 메서드가 우선권을 가짐