자동타입변환 promotion
- 프로그램 실행 도중에 자동적으로 타입 변환이 일어남
부모 타입 변수 = 자식 타입;
- 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있음
- 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이면 자동 타입 변환이 일어날 수 있음
- 부모 타입으로 자동타입 변환된 이후 부모 클래스에 선언된 필드와 메소드만 접근 가능
- 변수는 자식 객체를 참조하지만 변수로 접근 가능한 멤버는 부모 클래스만 가능
- 예외-> 메소드가 자식 클래스에서 재정의된 경우 자식 클래스의 메소드가 대신 호출됨
필드의 다형성
- 다형성을 구현하기 위해서 부모타입으로 자동 타입 변환이 필요함
- 필드의 타입을 부모 타입으로 선언하면 다양한 자식 객체들이 저장될 수 있기 때문에 필드 사용 결과가 달라질 수 잇음 -> 필드의 다형성
- 객체들이 다른 객체로 교체 될 수 있어야 함
- 자동 타입 변환을 이용해서 필드값을 교체함으로써 메소드를 수정하지 않아도 다양한 실행결과를 얻게 됨 -> 필드의 다형성
매개 변수의 다형성
- 자동 타입 변환은 주로 메소드를 호출할 때 발생
- 매소드 호출시 매개 변수의 타입과 동일한 매개값을 지정하는 것이 정석이지만 매개값을 다양화 하기 위해 매개 변수에 자식 객체를 저장할 수도 있음
- 매개 변수 타입이 클래스일 경우, 해당 클래스의 객체뿐만 아니라 자식 객체까지도 매개값으로 사용 가능
강제 타입 변환 (casting)
- 자식타입 변수 = (자식타입) 부모타입;
- 자식타입이 부모 타입으로 자동 타입 변환 된 후 다시 자식 타입으로 변환할 때 사용
- 자식에 선언된 필드와 메소드를 꼭 사용해야 할 때 강제 타입 변환을 해서 다시 자식 타입으로 변환 후 자식의 필드와 메소드 사용
객체 타입 확인 instanceof 연산자
- 어떤 객체가 어떤 클래스의 인스턴스인지 확인하기 위해 사용
boolean result = 좌항(객체) instanceof 우향(타입)
- 매개값의 타입을 조사할 때 주로 사용
- 메소드 내에서 강제 타입 변환이 필요한 경우 매개값이 어떤 객체인지 instanceof 연산자로 확인하고 안전하게 강제 타입 변환
- 타입 확인 안하고 강제 타입 변환 시도시 ClassCastException 발생할 수 있음
확인문제
- 자식 객체는 부모 타입으로 자동 타입 변환 된다 (o)
- 부모 객체는 항상 자식 타입으로 강제 타입 변환 된다 (x)
- 자동 타입 변환을 이용해서 필드와 매개 변수의 다형성을 구현한다. (o)
- 강제 타입 변환 전에 instanceof 연산자로 변환 가능한지 검사하는 것이 좋다 (o)
'Java > 혼자 공부하는 자바' 카테고리의 다른 글
혼자공부하는자바 8-1 인터페이스 (0) | 2022.12.05 |
---|---|
혼자공부하는자바 7-3 추상 클래스 (0) | 2022.12.03 |
혼자공부하는자바 7-1 상속 (0) | 2022.11.30 |
혼자공부하는자바 6-6 패키지와 접근 제한자 (0) | 2022.11.28 |
혼자공부하는자바 6-5 인스턴스 멤버와 정적 멤버 (0) | 2022.11.28 |