인터페이스의 다형성
- 프로그램 소스 코드는 변함 없지만 구현 객체를 교체함으로써 프로그램의 실행결과가 다양해짐
자동 타입 변환 promotion
- 자동타입변환 : 구현 객체가 인터페이스 타입으로 변환 되는 것
- 인터페이스 구현 클래스를 상속해서 자식 클래스를 만들었다면 자식 객체 역시 인터페이스 타입으로 자동 타입 변환 가능
- 필드의 다형성과 매개 변수의 다형성을 구현할 수 있음
필드의 다형성
- 매개 변수의 다형성: 매개 변수 타입이 인터페이스일 경우 어떠한 구현 객체도 매개값으로 사용할 수 있고, 어떤 구현 객체가 제공되느냐에 따라 메소드의 실행결과가 다양해짐
강제타입변환 (casting)
- 구현 객체가 인터페이스 타입으로 자동 타입 변환하면, 인터페이스에 선언된 메소드만 사용가능 -> 제약
- but, 경우에 따라서 구현 클래스에 선언된 필드와 메소드를 사용해야 하는 경우 발생 -> 강제타입변환(casting) 사용 -> 다시 구현 클래스 타입으로 변환 -> 구현 클래스의 필드와 메소드 사용
객체 타입 확인
- 강제 타입 변환은 구현 객체가 인터페이스 타입으로 변환되어 있는 상태에서 가능
- 어떤 구현 객체가 변환되어 있는지 모르는 상태에서 강제타입변환 할 경우 ClassCastException 에러가 발생할 수 있음
- -> instanceof 연산자를 사용해서 인터페이스 타입으로 변환된 객체 확인
확인문제
- 구현 객체는 인터페이스 타입으로 자동 변환된다 (o)
- 부모 클래스가 인터페이스를 구현하면 자식 클래스로부터 생성된 객체는 인터페이스 타입으로 자동 변환할 수 있다. (x)
- 인터페이스 변수에 대입된 객체를 원래 구현 클래스 타입으로 변환하는 것을 강제 타입 변환이라고 한다 (o)
- 메소드의 매개변수 타입이 인터페이스이면 매개값으로 모든 구현 객체를 대입하면 자동 타입 변환이 된다 (o)
- 다형성을 구현하기 위한 조건은 메소드의 재정의와 타입 변환이다 (o)
- 클래스 상속과 인터페이스는 모두 메소드 재정의와 티압 변환 기능이 제공되므로, 어떤 방법을 사용하든 다형성 구현이 가능하다. (o)
- 매개 변수 타입이 클래스라면 해당 클래스로 생성된 객체만 대입이 가능하다 (x)
- 매개 변수의 타입이 인터페이스라면 모든 구현 객체가 대입이 가능하다 (o)
'Java > 혼자 공부하는 자바' 카테고리의 다른 글
혼자공부하는자바 9-2 익명 객체 (0) | 2022.12.07 |
---|---|
혼자공부하는자바 9-1 중첩 클래스와 중첩 인터페이스 소개 (0) | 2022.12.07 |
혼자공부하는자바 8-1 인터페이스 (0) | 2022.12.05 |
혼자공부하는자바 7-3 추상 클래스 (0) | 2022.12.03 |
혼자공부하는자바 7-2 타입 변환과 다형성 (0) | 2022.11.30 |