본문 바로가기
JAVA

[JAVA] 템플릿 메서드

by watergrace2u 2022. 3. 31.
반응형
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

댓글