추상 메소드와 상수 필드만 가질 수 있는 클래스의 변형체이다. 구현은 지정한 클래스에서 진행하고, 인터페이스를 다른 클래스에서 구현할 때는
implements키워드를 사용한다.
// Clothes.java (인터페이스)
interface Clothes{
// public static final은 생략이 가능하다.
public static final int MAX_PRICE = 1000000;
int MIN_PRICE = 10;
// public abstract 생략이 가능하다.
public abstract void getName();
void getPrice();
}
// Top.java (클래스)
class Top implemenths Clothes{
}
⚠️ 여기서 잠깐
각각의 버전별로 밑에 있는 메소드들이 작성 가능해졌다.
interface Product {
public abstract double getPrice();
String getName(); // 묵시적
}
✅ 여기에서 getName()과 getPrice()는 강제로 구현되어야 한다.
class Electronics implements Product {
private String name;
private double price;
public Electronics(String name, double price) {
this.name = name;
this.price = price;
}
@Override
public String getName() {
return name;
}
@Override
public double getPrice() {
return price;
}
}
// 클래스는 1개의 클래스를 상속하고, 여러개의 인터페이스를 구현할 수 있다.
class Duck extends Animal implements Flyable, Swimmable {
}
// 인터페이스는 인터페이스만 상속이 가능하다. (다중 상속도 가능)
interface Blouse extends Clothes, Top {
}
| 추상 클래스 | 인터페이스 | |
|---|---|---|
| 상속 가능 범위 | 단일 상속 | 다중 상속 |
| 키워드 | extends | implements |
| 추상 메소드 개수 | abstract 메소드 0개 이상 | 모든 메소드는 abstract (버전에 따라 차이가 생김) |
| abstract 키워드 | 명시 | 묵시 |