인터페이스와 추상클래스의 차이를 보기 전에
먼저 추상메소드가 무엇인지 알아보자.
선언부는 있는데 구현부가 없는 메소드
용도
추상메소드 형식
public abstract class Animal {
abstract void sound();
}
public class Dog extends Animal
{
@Override
void sound() {
System.out.println("멍멍!");
}
}
관련성이 높은 클래스 간 공통적인 특성을 추출한 클래스
한 개 이상의 추상메서드를 가지는 클래스
용도 - 중복 제거
Telephone
에서 turnOn()
으로, SmartPhone
에서는 powerOn()
으로 설계하는 경우 → 객체마다 사용 방법이 달라진다.추상클래스 형식
public abstract class Animal {
//필드
//생성자
//메소드
}
public class Dog extends Animal{
public Dog(){
super(); //부모클래스의 생성자 호출해야 함.
}
}
여러 클래스들이 지켜야 하는 규약
클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장한다.
용도 - 확장
Animal animal = new Cat(); //기존 Cat 객체
Animal animal = new Dog(); //Dog 객체로 코드 수정 없이 바꾸기
인터페이스 형식
abstract
키워드 생략 가능public interface Animal{
//상수
//추상메소드
public void sound();
}
public class Dog implements Animal {
//실체메소드
@Override
public void sound(){
System.out.println("멍멍");
}
}
인터페이스(최소한의 약속)
추상클래스(공통 부분 추상화)