하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다
부모 클래스의 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하려 구현하고 있다 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나
부모 클래스의 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있는데 참조 변수가 사용할 수 있는 멤버의 개수가 실제 인스턴스의 멤버 개수보다 같거나 적어야 한다
class Parent { ... }
class Child extends Parent { ... }
...
Parent pa = new Parent(); // 허용
Child ch = new Child(); // 허용
Parent pc = new Child(); // 허용
Child cp = new Parent(); // 오류 발생.
특정 타입의 참조 변수로 당연히 같은 타입의 인스턴스를 참조할 수 있다 (참조 변수로 쓸 멤버의 개수 == 실제 인스턴스의 멤버 개수)
부모 클래스 타입의 참조 변수로 당연히 자식 클래스 타입의 인스턴스를 참조할 수 있다 (부모 클래스 타입 참조 변수로 쓸 인스턴스 멤버의 개수 > 자식 클래스 인스턴스의 멤버 개수)
자식 클래스 타입의 참조 변수로 당연히 부모 클래스 타입의 인스턴스를 참조할 수 없다 (자식 클래스 타입 참조 변수로 쓸 인스턴스 멤버의 개수 < 부모 클래스 인스턴스의 멤버 개수)
<aside> 💡 클래스는 상속을 통해 확장될 수는 있어도 축소될 수 없기 때문에 자식 클래스에서 사용할 수 있는 멤버의 개수가 언제나 부모 클래스와 같거나 많게 된다
</aside>
다음과 같은 조건에 따라 타입 변환을 할 수 있다
참조 변수의 타입 변환도 기본 타입의 타입 변환과 마찬가지로 타입캐스트 연산자(())를 사용한다