- 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질.
- 부모 클래스 타임의 참조 변수에 자식 객체들을 대입하여 다룰 수 있는 것이 다형성의 기본 개념
Up Casting
- 자식 타입의 객체가 부모 타입의 객체로 형 변환 되는 것.
- 자동으로 형 변환이 일어나기 때문에 부모 클래스 타입의 참조 변수가 모든 자식 객체들을 별도의 형 변환 없이 대입 받을 수 있다.
- 부모 타입으로 업 캐스팅된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능
- 예외 : 부모 타입의 메소드가 오버라이딩되었다면 오버라이딩된 메소드가 대신 호출
Animal animal = new Dog();
System.out.println(animal.bark());
Animal animal = new Cat();
System.out.println(animal.bark());
Down Casting
- 다운 캐스팅은 부모 타입의 객체가 자식 타입의 객체로 형 변환 되는 것
- 자동으로 형 변환이 일어나지 않기 때문에 형 변환 연산자를 사용해서 형 변환 해야함
Animal animal = new Dog();
Dog dog = (Dog) animal;
- 부모 클래스 타입 참조 변수가 실제로 참조하는 객체를 확인하지 않고 강제 형 변환을 시도하면 ClassCastException 예외가 발생할 수 있음
- 객체가 어떤 클래스의 인스턴스인지 instanceof 연산자를 사용해서 확인할 수 있음
if(animal instanceof Dog) {
...
} else if (animal instanceof Cat){
...
}