• 검색 결과가 없습니다.

예 )

4 void paint(Graphics g);

Chap.3

4.3.1

68

4.3.1 인터페이스 인터페이스 (interface) (interface)

예제 : Drawable.java

1 import java.awt.Graphics;

2

Chap.3

4.3.1

69

4.3.1 인터페이스 인터페이스 (interface) (interface)

z 예제 : DrawApplet.java

1 import java.awt.*;

2 import java.applet.*;

3

4 public class DrawApplet extends Applet { 5 Drawable drawable[];

6

7 public void init() {

8 drawable = new Drawable[3];

9 drawable[0] = new DrawableCircle(45, 45, 30);

10 drawable[1] = new DrawableRectangle(25, 25, 40, 65);

11 drawable[2] = new DrawableCircle(90, 70, 60);

12 } 13

14 public void paint(Graphics g) { 15 int n = drawable.length;

16 for(int i=0; i< n; i++) { 17 drawable[i].paint(g);

18 }

………..

Chap.3

4.3.2

70

4.3.2 인터페이스 인터페이스 특성 특성

z 인터페이스 특성

† 인터페이스의 멤버필드는 디폴드로 static, final로 선언

 따라서 인터페이스의 멤버필드의 값을 변경하려는 시도는 컴파일 시에

에러를 발생

† 인터페이스 구현 – 서브타입

† 여러 개의 인터페이스를 구현하는 경우

 콤마를 이용해서 기술

† 인터페이스의 임플리멘츠도 상속과 같은 개념

 인터페이스를 임플리멘츠한 서브클래스는

인터페이스의 멤버필드를 상속 받아서 사용할 수 있다.

† 인터페이스의 상속

 extends 키워드 사용

interface ScaledDrawable extends Drawable{…..}

Chap.3

4.4 static

71

4.4 static 과 과 final final 의 의 의미 의미

z final 클래스

† 그 클래스는 더 이상 상속을 통해서 재사용할 수 없음

 final 클래스를 상속받으려는 클래스는 컴파일 시에 에러가 발생

† 클래스 앞에 final 키워드 사용

public final class FinalClass{ …. }final

z final 메소드

† final이 메소드에 선언된 경우, 오버라이딩이 불가능

† 메소드 앞에 final 키워드 사용 public final void print(){ …. }final

z final 멤버필드

† 값을 변경할 수 없는 상수의 의미

† final 멤버필드는 값을 초기화만 할 수 있고, 새로이 값을 할당할 수는 없음

† 멤버필드 앞에 final 키워드 사용 public final int a = 10;final

Chap.3

4.4 static

72

4.4 static 과 과 final final 의 의 의미 의미

z static 멤버필드

† 객체들간의 전역변수처럼 사용됨

† 클래스 이름으로 접근한다. (ex : Color.red)

† 멤버필드 앞에 static 키워드 사용 static

static int a = 3;

z static 메소드

† 혹은 클래스 메소드라고도 함

† 인스턴스가 아닌 클래스 이름으로 메소드 호출

ex : Math.abs(-10);

† 메소드 앞에 static 키워드 사용

public final staticstatic void sayHello(String arg){ .… }

† 주의

 this, super를 사용할 수 없음

 static이 아닌 멤버필드는 접근할 수 없음

Chap.3

4.4 static

73

4.4 static 과 과 final final 의 의 의미 의미

z static 초기화

† 클래스내에서 static 키워드를 이용해서 초기화 루틴을 사용할 수 있음

 static 초기화는 클래스가 초기화될 때 수행

 대표적인 static 초기화의 예는 네이티브 메소드에서 라이브러리를 로드 static {

System.loadLibrary("hello");

}

† 자바 클래스에서 멤버필드나 메소드의 위치는 크게 중요하지 않았음

 그러나 static 초기화에서는 변수의 위치는 중요

 뒤에 선언된 변수나 함수를 앞에서 레퍼런스해서 사용할 수 없음

예제 : BadStaticInitial.java

1 class BadStaticInitial { 2 static int i = j + 2;

3 static int j = 4;

4 }

Chap.3

5.1

74

5.1 내부 내부 클래스 클래스 (Inner Class) (Inner Class)

z

내부 클래스

† 클래스내부에 정의된 클래스

† 외부 클래스의 멤버 필드와 메소드에 자유롭게 접근 가능

z

종류

† 내재된 (Nested) 톱레벨 클래스 / 인터페이스

클래스나 인터페이스가 static으로 선언된 경우

패키지의 멤버 – 다른 클래스에서 사용될 수 있음

† 멤버 클래스

클래스의 멤버로 정의됨

† 지역 클래스

메소드 내부에서 정의됨

† 무명 클래스

메소드 내부에서 정의됨

Chap.3

5.1.1

75

5.1.1 내재된 내재된 톱레벨클래스 톱레벨클래스 / / 인터페이스 인터페이스

z 내재된 (Nested) 톱레벨 클래스 / 인테페이스

† 다른 클래스에 포함되면서 클래스나 인테페이스가 static으로 선언된 경우

† 다른 톱레벨 클래스와 같이 패키지의 멤버이다.

 LinkedList 클래스에 내재된 인터페이스 Linkable이 있다면,

Linkable 인터페이스는 LinkedList.Linkable로 접근할 수 있다.

예제 : LinkedList.java

1 public class LinkedList {

2 protected Linkable head;

3

4 public LinkedList() { 5 head = null;

6 }

…………...

12 public interface Linkable {

관련 문서