- 인터페이스에서 선언하는 모든 변수는 자동으로 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
반응형
'Java > 본격 Java 인터페이스' 카테고리의 다른 글
[Java] throw 예외처리 (0) | 2020.07.01 |
---|---|
[Java] 자주사용되는 예외 (0) | 2020.07.01 |
[Java] 예외처리 (0) | 2020.07.01 |
[Java] Interface(인터페이스) (0) | 2020.07.01 |
[Java] Interface(인터페이스) - abstract class(추상화 클래스) (0) | 2020.07.01 |