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("클래스에 정의된 메소드 ...");
	}
	
}

인터페이스를 여러개 만들어 두고 클래스에 그 여러 개를 상속받을 수 있다! 그렇기에 형제들끼리는 서로 캐스팅될 수 없는데 여기에서는 구현된 인터페이스끼리는 캐스팅이 가능.

+ Recent posts