[Java] 추상클래스 - 예제

나영원·2020년 8월 30일
0

Java_basic

목록 보기
48/60

자동차 주행과정 구현하기

Car 추상 클래스를 상속받는 Sonata, Avate, Gradeur, Genesis 클래스가 있습니다. 각 차는 주행하기 위해 다음 메서드의 순서로 움직입니다.

run(){
  start();
  drive();
  stop();
  turnoff();
}

run() 메서드를 템플릿 메서드로 구현하고 CarTest 클래스를 ArrayList를 활용하여 다형성이 구현되게 작성하시오

public abstract class Car {
	
	public abstract void start();
	public abstract void drive();
	public abstract void stop();
	public abstract void turnoff();
	
	final public void run() {
		start();
		drive();
		stop();
		turnoff();
		System.out.println("=================");
	}
}
  • Car 클래스를 작성하고 공통된 메서드인 start(),drive(),stop(),turnoff();를 추상메서드로 구현하고 클래에도 abstract를 선언해줍니다.

  • run()메서드를 Car 클래스의 메서드들의 기능하는 순서를 조직하는 템플릿 메서드로 작성합니다.
    public class Sonata extends Car{

	@Override
	public void start() {
			System.out.println("Sonata 시동을 켭니다");
	}

	@Override
	public void drive() {
		System.out.println("Sonata 달립니다");
	}

	@Override
	public void stop() {
		System.out.println("Sonata 멈춥니다.");
		
	}

	@Override
	public void turnoff() {
		System.out.println("Sonata 시동을끕니다.");
	
	}
}
  • Sonata 클래스를 하부 클래스로 작성하고 추상 메서드들에 출력문을 작성합니다.

  • 나머지 3개의 하부 클래스도 이름을 바꾸 똑같이 작성합니다.(생략)

import java.util.ArrayList;

public class CarTest {

	public static void main(String[] args) {

		ArrayList<Car> carList = new ArrayList<Car>();
		
		carList.add(new Sonata());
		carList.add(new Grandeur());
		carList.add(new Avante());
		carList.add(new Genesis());
		
		for(Car car : carList) {
			car.run();
		}
	}
}
  • CarTest 클래스를 작성하고 Car를 자료형으로 하는 ArryList를 만들어 add메소드를 통해 하부 클래스들을 new하여 배열에 담습니다.

  • 향상된 for문을 사용하여 배열안에 모든 인스턴스들이 run()메서드를 사용하게 합니다.

//결과
Sonata 시동을 켭니다
Sonata 달립니다
Sonata 멈춥니다.
Sonata 시동을끕니다.
=================
Grandeur 시동을 켭니다
Grandeur 달립니다
Grandeur 멈춥니다.
Grandeur 시동을끕니다.
=================
Avante 시동을 켭니다
Avante 달립니다
Avante 멈춥니다.
Avante 시동을끕니다.
=================
Genesis 시동을 켭니다
Genesis 달립니다
Genesis 멈춥니다.
Genesis 시동을끕니다.
=================
profile
배우는 개발 일기

0개의 댓글