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

+ Recent posts