유연하고 쉽게 변경이 용이한 자바의 특성을 뒷받침하는 속성이다. 다형성은 부모 클래스가 자식 클래스의 동작 방식을 알 수 없어도 오버라이딩을 통해 자식 클래스에 접근을 가능 하게 한다. 이를 통해 자바는 객체 지향형 언어가 될 수 있는 것이다.
그렇다면 다형성이 어떻게 해서 가능한 것인가?
자바 언어는 동적으로 바인딩하기 때문에 메서드 실행 즉 run time 에 바인딩이 된다. 그러므로 메서드가 실행되는 시점에 부모 메서드의 성격을 결정하는 것임.
다형성의 실세계 비유
상속 관계
오버라이딩
업캐스팅
부모 자식 클래간 상속이 이뤄져야한다.
class Animal{
public String name;
public String breed;
Animal(String name, String breed){
this.name = name;
this.breed = breed;
}
void cry(){
System.out.println("울음소리 :( )");
};
}
class Cat extends Animal{}
class Dog extends Animal{}
자식 클래스에서 메소드 재정의
class Cat extends Animal{
public String name;
public String breed;
Cat(String name, String breed){
this.name = name;
this.breed = breed;
}
@Override
void cry(){
System.out.println("Meow ~");
}
}
class Dog extends Animal{
public String name;
public String breed;
Dog(String name, String breed){
this.name = name;
this.breed = breed;
}
@Override
void cry(){
System.out.println("Grr ~");
}
}
자식 클래스 객체를 부모 클래스로 형변환
Animal a1 = new Dog("Phil", "Dog")