abstract class and interface

추상클래스와 인터페이스 차이

추상클래스 (abstract class)

추상메서드

추상 클래스는 반드시 하나 이상의 추상메서드를 가지며, 객체를 생성할 수 없다.

하지만 슈퍼클래스로 사용할 수 있으며 추상메서드를 사용하기 위해 반드시 해당 메서드를 재정의 해야만한다.

위 말을 코드로 보면 이해가 쉽다.

< 추상클래스 형식 >

// 추상클래스 
public abstract class AbstractTest { 
    // 추상메서드 
    public abstract void dogName(String name); 
    // 일반메서드 
    public void dog(){ 
        System.out.println("개 이름 알아보기"); 
    } 
}

① 하나 이상의 추상메서드를 가진다 → 추상메서드 : dogName

② 객체를 생성할 수 없다 → 다음과 같이 new 추상클래스(); 로 생성할 수 없다.

public class MainTest { 
  public static void main(String[] args){ 
    // 객체로 생성할 수 없다 (X) 
    AbstractTest abt = new AbstractTest(); 
  } 
}

③ 슈퍼클래스로 사용할 수 있고, 추상메서드는 반드시 재정의해야한다

// 추상클래스 
public class Test1 extends AbstractTest { 
  // 추상메서드 재정의 
  @Override public void dogName(String name){ 
    System.out.println("개 이름은 " + name +"입니다."); 
  } 
}

하여 사용방법은 상속받은 자식클래스 객체를 생성한다

public class MainTest { 
  public static void main(String[] args){ 
  // 상속받은 자식클래스로 객체를 생성한다 (O) 
    AbstractTest abt = new Test1("깐돌이"); 
  } 
}

인터페이스

추상메서드와 상수로만 이루어져 있다. 즉, 로직을 작성할 수 없다.

< 인터페이스 형식 >

// 인터페이스 형식 
public interface DogTest { 
  void LargeDog(); 
  void SmallDog(); 
}
// 인터페이스 다중상속 가능 
public interface 인터페이스명 extends 상속받을 인터페이스명1, 상속받을 인터페이스명2, ...{ 
  void 추상메서드1(); ... 
}

< 클래스가 인터페이스 참조 형식 >

public class DogTestImpl implements DogTest { 
  @Override void LargeDog(){ 
    System.out.pringln("리트리버, 보더콜리"); 
  } 
  @Override void SmallDog(){ 
    System.out.println("시츄, 말티즈"); 
  } 
}

추상클래스와 인터페이스의 공통점 및 차이점

스크린샷 2022-03-16 오전 12 21 51

원문링크

[Java] 추상클래스와 인터페이스 차이