본문 바로가기

📚Study Note/JAVA

[ JAVA ] 클래스 고급 - 인터페이스(Interface) ②

//인터페이스
interface ADemo
{
	public void write();
	
}
//인터페이스
interface BDemo
{
	public void print();
}

//클래스
//class DemoImpl
// 두 인터페이스를 구현하는 추상 클래스
//abstract class DemoImpl implements ADemo, BDemo
//두 인터페이스를 구현하는 클래스
class DemoImpl implements ADemo, BDemo // ◈ 두 개의 인터페이스를 상속하고 있음
{
	// JDK 1.5(5.0)에서는 인터페이스 메소드를 오버라이딩 할 때 @Override 어노테이션을 사용할 수 없다
	// JDK 1.6 이후부터 적용 가능한 문법이다. 
	// (클래스에서 쓰는 것은 1.5부터, 인터페이스에서는 1.6 에서부터 가능하다.)
	// 단, 상속받은 클래스의 메소드를 오버라이딩할 때에은 JDK 1.5 에서도 오버라이드 어노테이션이 가능하다.

	@Override
	public void write()
	{
		System.out.println("ADemo 인터페이스 메소드....");
		
	}
	@Override
	public void print()
	{
		System.out.println("BDemo 인터페이스 메소드....");
	}





}//end DemoImpl



// main() 메소드를 포함하는 외부 클래스
public class Test113
{
	public static void main(String[] args)
	{
		//ADemo ob = mew ADemo();	//인터페이스를 직접 인스턴스 생성하는것은 불가능하다. 
		//BDemo ob = new BDemo();

		DemoImpl ob1 = new DemoImpl(); //위에서 오버라이드 하고 abstract 뗏기 때문에 가능하다.
		// ADemo BDemo 인터페이스를 구현한 클래스 기반의 인스턴스 생성

		ob1.write();
		ob1.print();

		ADemo ob2 = new DemoImpl(); // 업캐스팅
		BDemo ob3 = new DemoImpl(); //업캐스팅
		//-==>> ADemo 인터페이스 메소드....
        //	    BDemo 인터페이스 메소드....

		//ob2.print(); //★★ADemo 에는 print() 가 없다.
		//ob3.write();
		//-==>> 에러 발생(컴파일 에러)

		((BDemo)ob2).print();
		((ADemo)ob3).write(); // 두 개모두 임플리먼트 했을 때 사실 상 아무 관련 없는 인터페이스들인데..
		// ※ DemoImpl 클래스가 ADemo. BDemo 두 인터페이스를 모두 구현했기 때문에 가능하다/
		// 만약 , DemoImpl 클래스가 두 인터페이스 중 하나만 구현한 상황이라면 처리할 수 없는 구문이 된다.

		((DemoImpl)ob2).print();               //다운캐스팅
		((DemoImpl)ob3).write();			   //다운캐스팅
		//-==>>BDemo 인터페이스 메소드....
        //     ADemo 인터페이스 메소드....




	
	
	
	}

}
/*
ADemo 인터페이스 메소드....
BDemo 인터페이스 메소드....
BDemo 인터페이스 메소드....
ADemo 인터페이스 메소드....
BDemo 인터페이스 메소드....
ADemo 인터페이스 메소드....
계속하려면 아무 키나 누르십시오 . . 
*/