Frog is cry
타입 변환과 다형성 본문
클래스 타입 변환, 자동 타입 변환, 다형성, 강제 타입 변환, instanceof
기본타입과 마찬가지로 클래스도 타입 변환이 있다.
ex) int i = 10; / double d = i;
ex) A a = new A(); / B b = a;
이를 활용하면 객체 지향 프로그래밍의 다형성을 구현할 수 있다.
다형성
> 사용 방법은 동일하지만 다양한 객체 활용에 여러 실행결과가 나오도록 하는 성질
> 메소드 재정의와 타입 변환으로 구현
자동 타입 변환(promotion)
> 프로그램 실행 도중 자동으로 타입 변환 일어나는 것
> 부모타입 변수 = 자식타입; 일경우만 가능
부모 타입으로 자동 타입 변환 이후에는 부모 클래스에 선언된 필드 및 메소드만 접근 가능
예외적으로, 메소드가 자식 클래스에서 재정의될 경우 자식 클래스의 메소드가 대신 호출
parent
메소드1
메소드2
child(parent 상속)
메소드2
메소드3
parent = child > 값 대입
parent.method1(); > 부모것을 불러옴
parent.method2(); > 자식쪽에 있는 메소드가 호출이 됨
parent.method3(); // 호출 불가
필드의 다형성
> 필드 타입을 부모 타입으로 선언할 경우
다양한 자식 객체가 저장되어 필드 사용 결과 달라질 수 있음
매개변수의 다형성
매개변수를 부모 타입으로 선언하는 효과
> 메소드 호출 시 매개값으로 부모 객체 및 모든 자식 객체를 제공할 수 있음
> 자식의 재정의된 메소드가 호출 -> 다형성
강제 타입 변환(casting)
부모 타입을 자식 타입으로 변환
> 조건 : 자식 타입이 부모 타입으로 자동 타입 변환한 후 다시 변환할때 사용
자식타입 변수 = (자식타입) 부모타입;
Parent parent = new Child(); // 자동 타입 변환
Child child = (Child)parent // 강제 타입 변환
instanceof 연산 자
> 어떤 객체가 어느 클래스의 인스턴스인지 확인
메소드 내 강제 타입 변환 필요한 경우
> 타입 확인하지 않고 강제 타입 변환 시도 시 ClassCastException 발생할 수 있음
> instanceof 연산자 통해 확인 후 안전하게 실행
ex) boolean result = 좌항(객체) instanceof 우항(타입)