package CHAPTER07;

// 추상 클래스 Vehicle 정의: 모든 차량이 공통으로 가져야 할 속성과 메소드를 정의
abstract class Vehicle {	
	String name;

	Vehicle(String name) {
		this.name = name;
	}
	
	void display() {
		System.out.println("이 차량은 " + name + "입니다.");
	}

	// 추상 메소드: 각 차량에서 반드시 구현해야 하는 메소드 (출발 및 정지)
	abstract void start(); 
	abstract void stop();
}

class Car extends Vehicle {

	Car() {
		super("자동차");
	}

	// 자동차의 출발 동작 구현
	@Override
	void start() {
		System.out.println("자동차가 시동을 걸고 출발합니다.");
	}

	// 자동차의 정지 동작 구현
	@Override
	void stop() {
		System.out.println("자동차가 브레이크를 밟고 멈춥니다.");
	}
}

class Bicycle extends Vehicle {
	Bicycle() {
		super("자전거");
	}

	// 자전거의 출발 동작 구현
	@Override
	void start() {
		System.out.println("자전거가 페달을 밟으며 출발합니다.");
	}

	// 자전거의 정지 동작 구현
	@Override
	void stop() {
		System.out.println("자전거가 브레이크를 사용하여 멈춥니다.");
	}
}

public class AbstractMethod {
	public static void main(String[] args) {
		Vehicle car = new Car();
		Vehicle bicycle = new Bicycle();

		car.display();
		car.start();
		car.stop();

		System.out.println(); 

		bicycle.display();
		bicycle.start();
		bicycle.stop();
	}
}
