인터페이스

Study/JAVA 2012. 7. 6. 14:41

다중 상속을 지원하기 위해서 추상 클래스와 유사한 인터페이스를 제공한다

이론적인 측면에서 객체는 코드를 갖는 구체적인 객체와 실제 코드를 갖지 않는 추상적인 객체로 구분


1
2
3
4
5
6
7
8
9
10
11
// 사물을 표현하기 위한 Thing 클래스
public abstract class Thing
{
    public String name;
     
    public Thing(String name)
    {
        this.name=name;
    }
 
}

1
2
3
4
5
// 인터페이스 선언
interface Valuable
{
    public int value();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 시계를 표현하기 위한 클래스
public class Watch extends Thing implements Valuable
{
    String brand;
     
    Watch(String b)
    {
        super("시계");
        brand = b;
    }
     
    public int value()
    {
        return 10000;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 돈을 표현하기 위한 클래스
public class Money extends Thing implements Valuable
{
    int value;
     
    Money(int value)
    {
        super("돈");
        this.value = value;
    }
     
    public int value()
    {
        return value;
    }
}

1
2
3
4
5
6
7
8
// 쓰레기를 표현하기 위한 클래스
public class Trash extends Thing
{
    Trash()
    {
        super("쓰레기");
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 가게를 표현하기 위한 클래스
public class Shop
{
    String name;
     
    public Shop(String name)
    {
        this.name=name;
    }
     
    public void sell(Valuable v, String goods)
    {
        System.out.print(name +"에서");
        System.out.print(v.value() +"원어치");
        System.out.println(goods +"를 팔았습니다");
    }
     
    public static void main(String args[])
    {
        Shop myshop = new Shop("자바 슈퍼");
        Money money = new Money(5000);
        Watch watch = new Watch("로렉스");
        Trash trash = new Trash();
         
        myshop.sell(money, "과자");
        myshop.sell(watch, "음료수");
         
    }
}


- 멤버 필드는 디폴트로 static, final로 선언되어 있다

따라서 인터페이스 멤버 필드의 값을 변경하려는 시도는 컴파일 시에 에러를 발생시킨다

- 인터페이스의 구현도 상속과 같은 개념이기 때문에 인터페이스를 구현한 서브클래스는 인터페이스의 멤버 필드를 상속받아서 사용할 수 있다

- 슈퍼클래스의 변수를 지칭할때는 super

인터페이스의 변수를 지칭할 때는 interface 형태

- 콤마를 이용해서 여러개를 기술할수 있다


'Study > JAVA' 카테고리의 다른 글

Swing ???  (2) 2012.07.09
final, static  (0) 2012.07.06
추상 클래스  (0) 2012.07.05
오버라이딩  (0) 2012.07.05
super  (0) 2012.07.05
Posted by 코딩하는 야구쟁이
,