인터페이스 상속
- 인터페이스끼리 상속이 가능합니다.
- 인터페이스는 클래스와 달리 다중 상속을 허용합니다.
public interface 인터페이스명 extends 인터페이스1, 인터페이스2, ... {
...
}
예시 1
하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 메소드뿐만 아니라
상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 가지고 있어야 합니다.
인터페이스 A
public interface A {
void methodA();
}
인터페이스 B
public interface B {
void methodB();
}
인터페이스 A와 B를 상속받은 인터페이스 C
public interface C extends A, B {
void methodC();
}
구현체(구현 클래스) CImpl
public class CImpl implements C {
@Override
public void methodA() {
System.out.println("method A");
}
@Override
public void methodB() {
System.out.println("method B");
}
@Override
public void methodC() {
System.out.println("method C");
}
}
실행
C c = new CImpl();
c.methodA(); // method A
c.methodB(); // method B
c.methodC(); // method C
예시 2
하위 인터페이스로 타입이 변환이 되면 상-하위 인터페이스에 선언된 모든 메소드를 사용할 수 있으나
상위 인터페이스로 타입 변환되면 상위 인터페이스에 선언된 메소드만 사용 가능합니다.
C c = new CImpl();
c.methodA();
c.methodB();
c.methodC();
A a = c;
a.methodA();
// a.methodB(); (x)
// a.methodC(); (x)
B b = c;
// b.methodA(); (x)
b.methodB();
// b.methodC(); (x)
예시 3
추상 메소드를 하나라도 구현하지 않을 경우 추상 클래스로 선언 필요 (주의)
public abstract class CImpl implements C {
@Override
public void methodA() {
System.out.println("method A");
}
@Override
public void methodB() {
System.out.println("method B");
}
// @Override
// public void methodC() {
// System.out.println("method C");
// }
}
'Backend > Java' 카테고리의 다른 글
[Java] 중첩 클래스 (0) | 2022.04.26 |
---|---|
[Java] 인터페이스 확장 (디폴트 메소드의 필요성) (0) | 2022.04.25 |
[Java] 자바 데이터 간 변환 (기본 타입, 문자열, Wrapper 클래스) (0) | 2022.03.20 |
[Java] 자바 Json 데이터 변환 (Json String To Java Object) (0) | 2022.03.19 |
[Java] 자바 콘솔 데이터 입력 받기 (Scanner) (0) | 2022.03.17 |