반응형
SMALL
// Car.java
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("시동을 끕니다.");
}
// 이 시나리오는 변하지 않는다 => final 키워드 추가
// 다른 곳에서 더이상 변경 불가능하다. (다른 곳에서 재정의 불가)
public final void run() {
startCar();
drive();
wiper();
stop();
washCar();
turnOff();
}
}
// ManualCar.java
public class ManualCar extends Car{
@Override
public void drive() {
System.out.println("사람이 운전합니다.");
System.out.println("사람이 핸들을 조작합니다.");
}
@Override
public void stop() {
System.out.println("사람이 브레이크로 정지합니다.");
}
@Override
public void wiper() {
System.out.println("사람이 수동으로 와이퍼를 조작합니다.");
}
}
// AICar.java
public class AICar extends Car {
@Override
public void drive() {
System.out.println("자율 주행합니다.");
System.out.println("자동차가 스스로 방향을 전환합니다.");
}
@Override
public void stop() {
System.out.println("자동차가 스스로 멈춥니다.");
}
@Override
public void wiper() {
System.out.println("비나 눈의 양에 따라 자동으로 조절됩니다.");
}
@Override
public void washCar() {
System.out.println("자동으로 세차가 됩니다.");
}
}
// CarTest.java
public class CartTest {
public static void main(String[] args) {
Car myCar = new ManualCar();
myCar.run();
System.out.println();
Car yourCar = new AICar();
yourCar.run();
}
}
반응형
LIST
'JAVA' 카테고리의 다른 글
[JAVA] String vs StringBuilder (0) | 2023.07.05 |
---|---|
[JAVA] 다운캐스팅 (0) | 2022.03.27 |
[JAVA] 다형성 (Polymorphism) (0) | 2022.03.24 |
[JAVA] 가상 메서드 (0) | 2022.03.24 |
[JAVA] 상위 클래스로 묵시적 형변환 (업캐스팅) (0) | 2022.03.24 |
댓글