본문 바로가기

Java/본격 Java 인터페이스

[Java] 인터페이스(interface) 다중 상속

- 인터페이스에서 선언하는 모든 변수는 자동으로 public static final로 선언됩니다.
  메소드없이 public static final로 선언되는 값을 위해 인터페이스를 사용하기도 합니다.

.

.

예제

import java.util.*;

interface Week
{
	int MON = 1, TUE = 2, WED = 3, THU = 4, FRI = 5, SAT = 6, SUN = 7;
	// interface에서 선언한 변수이므로 자동으로 public static final로 지정됨.
}

class InterfaceConst
{
	public static void main(String[] args) 
	{
		Scanner sc = new Scanner(System.in);
		System.out.println("오늘의 요일을 입력하세요.");
		System.out.println("1.월, 2.화, 3.수, 4.목, 5.금, 6.토, 7.일");
		System.out.print("요일 번호 : "); int sel = sc.nextInt();

		switch (sel)
		{
		case Week.MON :
			System.out.println("월요일 입니다."); break;
		case Week.TUE :
			System.out.println("화요일 입니다."); break;
		case Week.WED :
			System.out.println("수요일 입니다."); break;
		case Week.THU :
			System.out.println("목요일 입니다."); break;
		case Week.FRI :
			System.out.println("금요일 입니다."); break;
		case Week.SAT :
			System.out.println("토요일 입니다."); break;
		case Week.SUN :
			System.out.println("일요일 입니다."); break;
		}
		// interface는 클래스는 아니나 클래스처럼 사용할 때도 있음
		// Week.MON : 클래스대신 interface를 사용하여 접근
	}
}

.

.

여기서 더 나아가 인터페이스는 class 상속과 다르게 다중 상속이 가능하다.

.

.

예제1

class TV
{
	public void onTV(){System.out.println("영상 출력 중");}
}

interface Computer
{
	public void dataReceive();
}

class ComputerImpl
{
	public void dataReceive(){System.out.println("영상 데이터 수신");}
}

class IPTV extends TV implements Computer
{
	ComputerImpl com = new ComputerImpl();
	public void dataReceive(){
		com.dataReceive();
	}
	public void powerOn(){
		dataReceive();
		onTV();
	}
}
class MultiInheri
{
	public static void main(String[] args) 
	{
		IPTV iptv = new IPTV();
		iptv.powerOn();
		
		TV tv = iptv;
		// 상위클래스인 TV의 인스턴스에 하위클래스 IPTV의 인스턴스가 들어감.
		Computer com = iptv;
		// 인터페이스는 클래스는 아니나 implements를 하면 마치 상위클래스처럼 동작할 수 있습니다.
	}
}

.

.

TV도 인터페이스로 선언한다면 어떻게 될까

.

.

예제2

interface TV
{
	public void onTV();
}

class TVImpl
{
	public void onTV(){System.out.println("영상 출력 중");}
}

interface Computer
{
	public void dataReceive();
}

class ComputerImpl
{
	public void dataReceive(){System.out.println("영상 데이터 수신");}
}

class IPTV implements TV, Computer
{
	ComputerImpl com = new ComputerImpl();
	TVImpl tv = new TVImpl();
	public void dataReceive(){
		com.dataReceive();
	}
	public void onTV(){
		tv.onTV();
	}
	public void powerOn(){
		dataReceive();
		onTV();
	}
}
class MultiInheri2
{
	public static void main(String[] args) 
	{
		IPTV iptv = new IPTV();
		iptv.powerOn();
		
		TV tv = iptv;
		Computer com = iptv;
	}
}
728x90
반응형