상속한 메서드를 불러일으킬 때 그림1과 같이 나타난다 그럴경우, 그림 2로 대처하면 된다.
그러나 이 부분의 문제는 파라미터를 player로 받아서 호출하는경우 Mage, Knight처럼 인자가 다르더라도 그림3처럼 player이동으로 나온다는 것. 이 부분은 그림4의 오버라이딩으로 해결가능하다.
* 다형성(Polymorphism) :다형성은 한 가지 인터페이스나 기능을 여러 형태로 구현할 수 있는 특성
* 오버로딩 : 함수 이름의 재사용. 매개변수의 타입, 개수, 순서 등을 다르게 하여 여러 개 정의할 수 있는 기능
* 오버라이딩 : 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 같은 이름으로 다시 정의하여 사용하는 것
그림4와 같이 조치해줬다면, 전과 동일하게 실행해도 타입별 각 오버라이딩된 메소드가 호출되는 것을 볼 수 있다.
* 추가문법
sealed : Knight를 상속하는 자식 class도 Move()를 오버라이드 할 수 있는데 해당 문법을 사용시 Knight의 자식 클래스는 더 이상 상속해서 쓰지 못하도록 막는다.
base.Move() : 부모 메서드를 실행한다.