에 관해서 질문드립니다!!..
왼쪽의 경우엔 컴파일 에러가 나고, 오른쪽의 경우엔.. 실행이 3이 출력이 되네요!!
또한 Person p1 = new Studnet(); 일때, p1 instanceof Student를 하면 true가 반환이 되더라구요.
그렇다는 말은.. p1이 가르키고 있는 인스턴스는 스튜던트가 맞다. 라는게 되는것같은데요
왼편의 p1.b가 오류나는 이유는,
p1은 person 객체를 참조하는데, person객체엔 b란게 없다구?! 라는 의미에서 컴파일 에러가 나는 것이고..
후자에서 3이 나오는 이유는, p1.b란게 호출될순 없어도.. p1이 가르키고 있는 메모리엔 b라는 String이 존재하기 때문이 맞나요?
그러니까..
p1.b 라는 것은, p1이 Person의 참조변수이기 때문에, 말이 안된다! 그러나 p1이 참조하는 인스턴스에 b는 존재한다.. 라고 생각하면 되련지요?
그리고, 오른편의 코드에서.. p1.hi()를 했을때 왜 Person 메소드의 hi가 아닌 Student 메소드의 hi가 실행되는지 잘 모르겠습니다.
상속관계의 메소드 오버라이딩 우선순위는 알고있습니다만, p1은 Person의 참조변수니까.. Person의 메소드가 실행되어야 하는게 아닐련지요?
제가 야매로 추론해보자면.. Person p1 = new Student(); 라고 해주면.
p1 은 실제론 Student()라는 객체가 존재하는 메모리를 가르키지만, 어디까지나 Person의 참조변수이기 때문에.. 이름이 똑같거나, person만 갖고 있는 애들만 이름을 통해 불러올수있는걸까요?
하지만.. 이 코드의 경우엔 3,5가 순서대로 출력되는데 말입니다....
ㅠㅅ ㅠ