티스토리 뷰

[인터페이스]

구현방식 : class 클래스명 implements 인터페이스명

 

 

1. 클래스를 작성하는 데에 도움을 주기 위해 사용한다.

   (추상클래스와 비슷하지만 추상화 정도가 더 높음)

 

2. 추상 메소드와 상수만을 멤버로 갖는다.

 

3. 인터페이스 내의 메소드는 항상 public이며 abstract 키워드가 생략되어 있다.

    -> 메소드를 인터페이스 외부에서도 구현할 수 있으려면 모두가 볼 수 있는 public으로 지정해야 함.

        또한 인터페이스 내의 메소드는 항상 추상 메소드여야하므로 써있지 않더라도 abstract 가 생략되어 있음.

 

4. 여러 개의 인터페이스를 동시에 상속(extends, implements) 받을 수 있다.  (인터페이스는 콤마로 구분)

 

5. 인터페이스 간의 상속 시에는 implements가 아닌 extends를 사용

 

6. 추상클래스와 인터페이스 모두를 상속 받으려면 다음과 같은 방식으로 사용

   -> class 클래스명 extends 추상클래스명 implements 인터페이스명

 

 

 

※ 심화

interface Inter1 {
	void a();
}

interface Inter2 {
	void b();
}

interface Inter extends Inter1, Inter2 {
	void c();
}

abstract class AbsClass {
	abstract void d();
}


public class Example extends AbsClass implements Inter {
	public void a() {
    	System.out.println("AAA");
    }
    public void b() {
    	System.out.println("BBB");
    }
    public void c() {
    	System.out.println("CCC");
    }
    public void d() {
    	System.out.println("DDD");
    }
    // 추상클래스와 인터페이스의 메소드 모두 구현 완료
    
    
    public static void main(String[] args) {
    	Example  ex1 = new Example();	// O
        AbsClass ex2 = new AbsClass();	// X
        Inter 	 ex3 = new Inter();		// X
        AbsClass ex4 = new Example();	// O !!!!
        Inter 	 ex5 = new Example();	// O !!!! 
        
        ex4.a();	// X
        ex4.b();	// X
        ex4.c();	// X
        ex4.d();	// O !!!
        
        ex5.a();	// O !!!
        ex5.b();	// O !!!
        ex5.c();	// O !!!
        ex5.d();	// X
    }
}

AbsClass ex4 = new Example(); 과 Inter ex5 = new Example(); 를 보면

추상클래스와 인터페이스는 객체 생성이 불가하지만 이를 상속하여 구현이 완료된 자식 클래스를 이용해서는 객체를 생성할 수 있다.  (=> 다형성)

또한, 그렇게 만들어진 객체는 원래 자신이 가지고 있는 메소드에만 접근이 가능하다.

즉, AbsClass ex4 = new Example(); 에서 ex4 객체는 AbsClass에 존재하는 d() 메소드에만 접근이 가능하다.

반응형

댓글