추상 메서드를 포함한 클래스
cf. concrete class
public abstract class Computer {
public abstract void display(); // { 구현 부분이 없음 }
}
코드를 구현할 구체적인 방법을 모를 때 미리 선언해두고, 상속받는 쪽에서 구현한다.
Desktop 클래스는 Computer 메서드에 대한 구현 책임이 있다고도 한다.
public abstract class Computer {
public abstract void display();
public abstract void typing();
public void turnOn() {
System.out.println("전원을 켭니다");
}
public void turnOff() {
System.out.println("전원을 끕니다");
}
}
public class Desktop extends Computer {
@Override
public void display() {
System.out.println("Desktop display()");
}
@Override
public void typing() {
System.out.println("Desktop typing()");
}
}
추상 메서드나 구현된 메서드를 활용하여 전체 기능의 흐름을 정의하는 메서드
package template;
public abstract class Car {
public abstract void drive();
public abstract void stop();
public abstract void wiper();
// 나중에 추가한 경우 하위 클래스에서 구현해줘야 함
public void washCar() {}
// 추상클래스가 아님
// 필요에 의해 재정의
public void startCar(){
System.out.println("시동을 켭니다");
}
public void turnOff(){
System.out.println("시동을 끕니다");
}
public final void run(){ // 바뀌면 안되는 시나리오
startCar();
drive();
wiper();
stop();
washCar();
turnOff();
}
}
final 변수는 값이 변경될 수 없는 상수, 값 할당은 한 번만 가능
final 메서드는 하위 클래스에서 재정의 불가
final 클래스는 상속 불가