Java Programming 03 (상속의 다형성, 오버라이딩)
myDog 클래스를 she라는 객체(주소)를 통해서 참조할 수 있는데, she.bark()라는 문장으로 she를 통해 myDog의 bark()메소드를 사용하겠다는 문장에서 myDog에는 bark라는 메소드가 존재하지 않아서 에러가 나야하지만, 그 위에 상속받은 클래스까지 확인을 해서 호출해오는 것 이다.
SYSO안에 있는 구문인 she.species나 she.myDogName도 마찬가지로 에러 없이 접근하고, 호출할 수 있다.
a는 Animal 클래스를 가르키고, b는 Dog 클래스와 Animal 클래스의 겹치는 메소드인 Move()만 가르킨다. 즉 Dog 클래스의 Move() 메소드를 지칭한다고 보면된다.
-> 그렇다면, 코드 실행 값은?
a.move()는 "동물은 움직입니다."가 실행되고, b.move()는 "강아지는 걷고 뜁니다."가 실행된다. b.bark() 같은 경우에는 b가 가리키는 곳엔 animal에 있는 메소드인 move()밖에 존재하지 않으므로 실행되지 않고 에러가 발생한다.
1과 크게 다르거나 특별한 부분은 없다. super.move()라고 했을 때, this는 현재 자신을 가리키는 것이고, super는 부모를 지칭한다는 부분만 확실하게 알아두면 좋다.