인터페이스도 다른 인터페이스를 상속할 수 있다. 인터페이스는 클래스와는 달리 다중 상속을 허용한다. 다음과 같이 extends 키워드 뒤에 상속할 인터페이스들을 나열할 수 있다.
public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 { ... }
하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 메소드뿐만 아니라 상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 가지고 있어야 한다. 그렇기 때문에 구현 클래스로부터 객체를 생성하고 나서 다음과 같이 하위 및 상위 인터페이스 타입으로 변환이 가능하다.
하위인터페이스 변수 = new 구현클래스( ... );
상위인터페이스1 변수 = new 구현클래스( ... );
상위인터페이스2 변수 = new 구현클래스( ... );
하위 인터페이스로 타입 변환이 되면 상위, 하위 인터페이스에 선언된 모든 메소드를 사용할 수 있으나, 상위 인터페이스로 타입 변환되면 상위 인터페이스에 선언된 메소드만 사용 가능하고 하위 인터페이스에 선언된 메소드는 사용할 수 없다. 다음 예제를 통해 확인해보자.
// InterfaceA.java -- 상위 인터페이스
public interface InterfaceA {
public void methodA();
}
// InterfaceB.java -- 상위 인터페이스
public interface InterfaceB {
public void methodB();
}
// InterfaceC.java -- 하위 인터페이스
public interface InterfaceC extends InterfaceA, InterfaceB {
public void methodC();
}
// ImplementationC.java
public class ImplementationC implements InterfaceC {
public void methodA() {
System.out.println("ImplementationC-methodA() 실행");
}
public void methodB() {
System.out.println("ImplementationC-methodB() 실행");
}
public void methodC() {
System.out.println("ImplementationC-methodC() 실행");
}
}
// Example.java
public class Example {
public static void main(String[] args) {
ImplementationC impl = new ImplementationC();
InterfaceA ia = impl;
ia.methodA(); // InterfaceA 변수는 methodA() 만 호출 가능
System.out.println(); // 공백
InterfaceB ib = impl;
ib.methodB(); // InterfaceB 변수는 methodB() 만 호출 가능
System.out.println(); // 공백
InterfaceC ic = impl; // InterfaceC 변수는 모두 호출 가능
ic.methodA();
ic.methodB();
ic.methodC();
}
}
'Java 길찾기 > 이것이 자바다' 카테고리의 다른 글
[Java] 인터페이스 - 타입 변환과 다형성 (2) (0) | 2022.02.07 |
---|---|
[Java] 디폴트 메소드와 인터페이스 확장 (0) | 2022.02.04 |
[Java] 인터페이스 - 타입 변환과 다형성 (1) (0) | 2022.01.28 |
[Java] 인터페이스 (2) (0) | 2022.01.27 |
[Java] 인터페이스 (1) (0) | 2022.01.26 |