추상클래스와 인터페이스
abstract class 이동수단 {
private boolean 시동 = false;
void 시동걸기() {
this.시동 = true;
}
abstract void 가속하기();
abstract void 감속하기();
}
class 차 extends 이동수단 {
public 차(boolean 시동) {
super(시동);
}
@Override
void 가속하기() {
System.out.println("액셀 밟기");
}
@Override
void 감속하기() {
System.out.println("브레이크 밟기");
}
}
public static final
이고, 모든 메소드는 public abstract
이다interface 입을 움직일 수 있는 {
int HEIGHT = 100; //public static final int HEIGHT
void 먹기(); //public static void 먹기()
static void 숨쉬기() { System.out.println("후하"); }
default void 물기() { System.out.println("앙"); }
}
class 말 extends 이동수단 implements 입을움직일수있는{
@Override
public void 먹기() {
System.out.println("냠냠");
}
}
인터페이스를 왜 사용하는가?
A-B의 직접적인 관계에서 A-I-B의 간접적인 관계로 변환한다.
인터페이스를 통한 간접적 클래스 사용으로 모듈교체가 간편해진다.
관계가 없는 클래스에게 인터페이스 구현을 통한 관계를 부여한다.
공통점 : 둘을 상속(구현)받은 메소드에서 재정의가 필요하다
또한 추상클래스의 경우 is-a 관계, 즉 Animal과 Dog의 관계를 구현할때 쓰이고, 인터페이스의 경우 is-able-to 관계, 즉 탈것과 비행기의 관계를 구현할때 쓰인다.