package ex0726;
public class Ex03_interface {
public static void main(String[] args) {
DemoImpl3 di1 = new DemoImpl3();
di1.print();
di1.disp();
di1.sub();
Ademo3 di2 = new DemoImpl3(); // up casting
Bdemo3 di3 = new DemoImpl3(); // up casting
// di2.print(); // 컴파일 오류. Ademo3 인터페이스에는 print() 메소드가 선언되어 있지 않음.
((Bdemo3)di2).print();
// 클래스에 Ademo3과 Bdemo3 인터페이스가 구현되어 있으므로 가능.
// 만약 Bdemo3 인터페이스가 구현되어 있지 않으면 런타임 오류 발생.
((DemoImpl3)di3).sub(); // 다운 캐스팅
}
}
interface Ademo3 {
public void disp();
}
interface Bdemo3 {
public void print();
}
// 클래스는 2개 이상의 인터페이스를 구현할 수 있다.(다중 상속이 되지 않는 부분을 보충)
class DemoImpl3 implements Ademo3, Bdemo3 { // 이게 중요한 부분!!!
@Override
public void print() {
System.out.println("Bdemo3 인터페이스 메소드 ...");
}
@Override
public void disp() {
System.out.println("Ademo3 인터페이스 메소드 ...");
}
public void sub() {
System.out.println("클래스에 정의된 메소드 ...");
}
}
인터페이스를 여러개 만들어 두고 클래스에 그 여러 개를 상속받을 수 있다! 그렇기에 형제들끼리는 서로 캐스팅될 수 없는데 여기에서는 구현된 인터페이스끼리는 캐스팅이 가능.
'쌍용강북교육센터 > 7월' 카테고리의 다른 글
0726_Ex05_interface : 인터페이스 (0) | 2021.07.26 |
---|---|
0726_Ex04_interface : 인터페이스 (0) | 2021.07.26 |
0726_Ex02_interface (0) | 2021.07.26 |
0726_Ex01_abstract : 추상 클래스 (0) | 2021.07.26 |
0723_Ex05_ClassTypeCast : 클래스 타입 캐스트 (0) | 2021.07.23 |