타입 변환과 다형성
class Tire{}
class HankookTire extends Tire{}
class KumhoTire extends Tire{}
main(){
Tire t = HankookTire // 참조 자동 타입 변환
}
interface Tire{}
구현클래스 인터페이스
class HankookTire implements Tire{}
main(){
인터페이스 = 자식
Tire t = HankookTire // 참조 자동 타입 변환(인터페이스<- 구현)
}
인터페이스의 다형성
프로그램을 개발할 때 인터페이스를 사용해서 메서드를 호출하도록 코딩했다면, 구현객체를 매우 손쉽고 빠르게 교체할 수 있습니다.
프로그램 소스 코드는 변함이 없는데, 구현 객체를 교체함으로써 프로그램의 실행결과가 다양해집니다.
클래스와 클래스간의 관계
부모클래스타입 변수 = 자식 클래스;
인터페이스와 클래스간의 관계
인터페이스 변수 = 구현객체;
자동 타입 변환
구현 객체가 인터페이스 타입으로 변환되는 것은 자동 타입 변환에 해당합니다.
필드의 다형성 예제
frontLeftTire와 frontRightTire를 교체하기 전에는 HankookTire 객체의 roll() 메서드가 호출되지만, KumhoTire로 교체된 후에는 KumhoTire객체의 roll()메서드가 호출됩니다. Car의 run() 메서드를 수정하지 않아도 다양한 roll() 메서드의 실행결과를 얻을 수 있게 되는 것입니다. 이것이 바로 필드의 다형성 입니다.
강제 타입 변환
구현 객체가 인터페이스 타입으로 자동 타입 변환하면 인터페이스에 선언된 메서드만 사용가능하다는 제약사항이 따른다.
예를 들어 인터페이스에는 3개의 메서드가 선언되어 있고 클래스에는 5개의 메서드가 선언되어 있다면 , 인터페이스로 호출 가능한 메서드는 3개 뿐이다.
하지만 경우에 따라서는 구현 클래스에 선언된 필드와 메서들를 사용해야 할 경우도 발생한다.
이때 강제 타입 변환(Casting)을 해서 다시 구현 클래스 타입으로 변환한 다음, 구현 클래스의 필드와 메서드를 사용할 수 있습니다.
구현 객체가 인터페이스 타입으로 자동 타입 변환하면 인터페이스에 선언된 메서드만 사용가능하다는 제약사항이 따른다.
예를 들어 인터페이스에는 3개의 메서드가 선언되어 있고 클래스에는 5개의 메서드가 선언되어 있다면 , 인터페이스로 호출 가능한 메서드는 3개 뿐이다.
하지만 경우에 따라서는 구현 클래스에 선언된 필드와 메서들를 사용해야 할 경우도 발생한다.
이때 강제 타입 변환(Casting)을 해서 다시 구현 클래스 타입으로 변환한 다음, 구현 클래스의 필드와 메서드를 사용할 수 있습니다.
예제)
인터페이스 다중 상속 예제
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java 중첩 클래스와 중첩 인터페이스 #1 (0) | 2023.02.22 |
---|---|
Java 인터페이스 #2 (0) | 2023.02.22 |
Java 인터페이스 #1 (0) | 2023.02.20 |
Java 상속 #6 (0) | 2023.02.20 |
Java 상속 #5 (0) | 2023.02.17 |