아래 코드의 정답은..!?!?!?
@Test
void test(){
A a = new B();
a.run();
}
class A {
protected void print(){
System.out.println("A run");
}
public void run(){
this.print();
}
}
class B extends A {
protected void print(){
System.out.println("B run");
}
}
📗 객체지향적인 언어를 만들 때 약속했다고 합니다.
모든 this 는 생성된 객체를 가르키기로 약속했기 때문에.
상속받은 B 객체의 부모객체의 A 의 메소드에서 this를 호출해도, 생성된 객체인 B 객체를 가르키는 것입니다!
➡️ 이게 내적일관성에 대한 약속
비야네 스트로스트룹 (C++ 창시자) 가 이를 제안했고, 이는 객체지향의 내적일관성을 지키기위한 제안에 불과합니다.
⚙️ Polymorphism(다형성) = 대체가능성 + 내적일관성
- 확장된 객체는 원본으로 대체 가능하다
- 생성 시점의 타입이 내부에 일관성 있게 참조된다.
이게 대체 가능성과 내적 일관성이며, 이 2가지가 지켜진다면 객체지향 언어라고 보자고 약속한거라고 생각됩니다..?!
📗 소중한 알쓸신잡
참고
- 팀장님 브래인
- 팀장님이 보신 Object 책