다형성이란 poly(여러개) + morphism(형태 or 실체)의 결합어로
하나의 객체가 여러가지 형태를 가질 수 있는 것을 의미한다.
한마디로 자바에서 부모클래스타입의 변수가 다양한 자식클래스타입의 객체를 참조할 수 있다.
이는 자바에서 굉장히 중요하게 다뤄지는 개념이다.
public class Computer {
...
public String toString() {
...
}
}
public class Notebook extends Computer {
...
public String toString() {
...
}
}
public static void main(String [] args) {
// 부모클래스인 Computer타입의 변수가 자식클래스인 Notebook타입의 객체를 참조 가능하다
Computer notebook1 = new Notebook();
// 하지만 자식클래스타입의 변수가 부모클래스타입의 객체를 참조하는건 불가능하다
Notebook notebook2 = new Computer(); <= error
}
그렇다면 Computer클래스에 있는 toString이라는 이름의 메서드가 Notebook클래스에서도 overriding하여 존재한다면 notebook1변수는 어느 클래스에 있는 toString메서드를 참조할 것인가.
결론부터 얘기하면 Notebook객체를 참조하고 있으므로 Notebook클래스에 있는 toString()메서드를 참조하게 된다. 이를 dinamic binding이라고 한다.