[java] 타입 변환과 다형성
다형성: 같은 타입이지만, 실행 결과가 다양한 객체를 이용할 수 있는 성질
부모 타입에는 모든 자식 객체가 대입이 가능하다. 그렇기 때문에 자식 타입은 부모 타입으로 자동 타입 변환이 가능하다 (like int -> double O | double -> int X)
자동 타입 변환 (Promotion)
부모 클래스 : Animal
자식 클래스 : Cat
Cat cat = new Cat();
Animal animal = cat; (Animal animal = new Cat() 도 가능)
바로 위의 부모가 아니더라도 상속 계층의 상위면 자동 타입 변환이 가능하다. 변환 후에는 부모 클래스 멤버만 접근 가능하다.
강제 타입 변환 (Casting)
부모 타입을 자식 타입으로 변환하는 것
조건
자식 타입을 부모 타입으로 자동 변환 후, 다시 자식 타입으로 변환할 때
ex) Cat cat = new Cat();
Animal animal = cat;
cat = (Cat)animal
객체 타입 확인 (instanceof)
부모 타입 이면 모두 자식 타입으로 강제 타입 변환할 수 았는 것이 아니다.
ex) Parent parent = new Parent(); // 부모 참조변수 parent가 부모 인스턴스를 참조하는 중
Child child = (Child) parent; // 따라서 캐스팅의 조건을 충족시키지 못해, 캐스팅 불가능
먼저 자식타입인지 확인 후 강제 타입변환을 실행해야 한다.
boolean result = 좌항(객체) instanceof 우항(타입)