다형성이란?

다형성은 부모타입의 참조변수로 자식타입의 인스턴스를 참조할 수 있게 한 것이다.

이렇게 함으로써, 변수들 사이에 연관성을 줄 수 있고, 다른 타입의 인스턴스들을 같은 참조변수 타입으로 참조해 배열로 다룰 수도 있다.

인터페이스를 구현해도 다형성을 적용할 수 있다.

하지만 부모타입은 항상 자손타입보다 작거나 같기 때문에 부모타입의 참조변수를 사용하는 자손 타입의 인스턴스는 부모 클래스에 있는 멤버만 사용할 수 있다.

형변환

자식타입 참조변수 → 조상타입 참조변수 : 생략가능

조상타입의 멤버가 더 적기 때문에 형변환에 문제가 없다.

형변환은 단순히 참조변수만 변경하는 것이고 인스턴스를 변환하는 것은 아니다.

사용할 수 있는 멤버의 범위를 조절하는 행위라고 할 수 있다.

기본형 변수

작은 자료형 → 큰 자료형 : 생략가능

instanceof

컴파일 타임에는 참조변수간의 타입만 체크하기 때문에, 조상인스턴스가 자식 참조변수에 들어가게 되더라도 컴파일에러가 발생하지 않고 런타임에러가 발생한다.

Car car = new Car();
FireEngine fe = null;

fe = (FireEngine)car; // Runtime error : ClassCastException

그래서 instanceof연산자를 사용해서 참조변수가 참조하는 실제 인스턴스 타입을 알아보는 것이다.

형변환 하기 전에 조건문에 쓰인다. true를 반환한다면 형변환을 할 수 있다는 것이다.