추상클래스와 비슷한 개념으로서,  추상같은 경우, 어느 클래스안에 어느 메소드가 사용될지 암시해주는 설계제공이었다.
인터페이스 같은 경우, 더 선호되는 설계기능으로, 비록 같은 추상메소드를 가지고 있으나, 차이점은

  1. 다중 상속이 가능하게 한다.
  2. 사전에 정의된 상수만 가질 수 있다.(추상클래스는 필드를 여러개 가질 수 있고, 상수가 아니어도 된다)
  3. 사전에 정의된 추상메소드만 가질 수 있다.(추상클래스는 추상메소드 이외에 다른 일반 메소드들도 가질 수 있다. 따라서 일반메소드의 body{}도 채워놓을 수 있다.)
    추상클래스보다 요구되는 설계의 기준이 더 높아서 더 체계적이라 할 수 있다.


[1] 인터페이스를 선언하고 메소드를 다루어보자.


1. Dog라는 인터페이스를 만들고, abstract로 추상메소드를 만들자(추상메소드를 만드는 과정은 추상클래스와 동일하다)
public interface Dog {
    
     abstract void crying();
     public void show();
    

}


2. 메인클래스, 메인함수를 만들어서 인터페이스를 상속(implements)해서 구현화해보자.  반드시 구현화할 메소드들을 오버라이딩해야한다.

public class Main implements Dog{

   
     public static void main(String[] args) {

    }

    @Override
     public void crying() {
         // TODO Auto-generated method stub
        
     }

    @Override
     public void show() {
         // TODO Auto-generated method stub
        
     }

}

3. 재정의로 구현화할 메소드 내용을 채워준다.

4. 메인클래스에서 상속했으니, static인 메인메소드에서 사용하려면, Main 객체를 만들어서 사용해야한다.

public class Main implements Dog{

   
     public static void main(String[] args) {
        
         Main main = new Main();
         main.crying();
         main.show();
        

    }

    @Override
     public void crying() {
        
         System.out.println("월 월!");
        
     }

    @Override
     public void show() {
         System.out.println("Hello World!");
     }

}


[2] 인터페이스의 다중 상속을 학습해보자.


  -  2개의 추상클래스를 만들어서, 2개를 모두 상속하면 오류가 난다.

1. Dog 인터페이스를 복사해서 , Cat 인터페이스를 만들어보자.

2. 메인클래스에서 implements Dog, Cat 으로 2개의 인터페이스를 다중상속해보자.

3. 반드시 오버라이딩해야하는 인터페이스의 메소드들을 추가해보자.
   만약 2개의 인터페이스의 추상메소드가 겹칠 경우, 하나만 구현화해줘도 문제가 없다.

public class Main implements Dog, Cat{

   
     public static void main(String[] args) {
        
         Main main = new Main();
         main.crying();
         
         main.dog();
         main.cat();
        

    }

    @Override
     public void crying() {
        
         System.out.println("월 월!");
        
     }


     @Override
     public void cat() {
         System.out.println("고양이 입니다.");
     }

    @Override
     public void dog() {
         System.out.println("개 입니다.");
        
     }

}

+ Recent posts