interface란 어떤 기능을 하는 매소드를 정의하는데 있어어 세세한 기능자체를
구현한것이아니고 어떤 매소드를 만들겠다고 추상적으로 선언만 해놓은
비슷한 매소드 모아놓은 것.
3. Interface
3.1 Interface의 특징
1) 클래스 -> 다중 상속
2) 객체를 발생 할 수 없는 클래스 이다.
ex) interfatc A{ }
A ap = new A(); // new A()에서 에러 발생
3) 포함 멤버 : 단 두가지 밖에 없다.
a) Field : public static final 자료형 변수명 = 값 // 무조건 이 종류만 포함 할 수 있다.
ex)
interface A {
int x = 10; //public static final가 생략되어 있는 형태이다.
}
A.x 와 같이 클래스명으로의 접근이 가능하다.(static이 생략된 형태이므로)
b) Method : public abstract 결과형리턴값 Method명(매개변수) 예외전가; //abstract Method만 포함을 시킬 수 있다.
interface A {
int x = 80; //public static final 생략된 형태
void aaa(); //public abstract가 생략된 형태
}
4) 하위클래스로 상속 시킨다음 존재하는 MEthod 모두를 overriding 해야함
ex)
interface A { } A ap = new A() // 사용 안됨
interface B extends A { } B bp = new B() // 사용 안됨
class C implements B { }
A ap = new C(); //사용 가능
B bp = new C(); //사용 가능
C cp = new C(); //사용 가능
// 상위에 메소드가 존재하면 overriding이 있어야 한다.
5) 순수 디자인 목적으로 사용
//------------------------------------------------------------------//
질문
ex) Abstract
abstract class A {
int x = 10;
A(int x) {
this.x = x;
}
abstract void view();
}
class B extends A {
int x = 20;
B(int x, int x1) {
super(x);
this.x = x;
}
void view() { // view1()이나 int view(), view(int x)라고 하면 overriding 되어있지 않으으므로 A bp = new B(); 에서 에러가 발생한다. abstract 정의를 필요로 한다는 에러 메세지 출력됨.
System.......(super.x);
System.......(this.x);
}
}
A ap = new A(); // 안됨 -> abstract 클래스이므로...
A bp = new B(); // 실행 가능
System.out.println(bp.x); // 10출력
abstract 메소드를 재정의 하지 않으면.. 에러메세지를 발생한다.
ex) interface
interface A {
int x = 100;
void view();
}
class B implements A {
int x = 200;
//B(int x, int x1) {
// super(x); //인터페이스는 생성자를 가질 수 없으므로 에러가 발생한다. super가 올수가 없다.
B(int x) {
this.x = x;
}
public void view() { // void view() 로 사용하면 에러 발생 -> 클래스 A의 view()는 .. public abstract 가 생략되어 있기 때문이다.
System.out.println(super.x);
System.out.println(this.x);
}
}
A ap = new A(); // 사용 안됨
System.out.println(A.x); // 100출력
A.view();
A ap = new B();
B bp = new B();
System.out.println(B.x); // 200출력
ap.view(); // 두개 모두.. B의 view가 실행 된다.
bp.view();
'Develop' 카테고리의 다른 글
동적바인딩 Virtual의 사용[링크] (0) | 2009.10.31 |
---|---|
C++ 의 추상 클래스와 Java 의 interface 의 차이[펌] (0) | 2009.10.31 |
set, get (0) | 2009.10.31 |
[셰이더] D3DVERTEXELEMENT9 (0) | 2009.10.29 |
XML (0) | 2009.10.28 |