본문 바로가기

Programming/JAVA

상속(7) - 필드의 다형성 3

java logo image

 

 

 

지난 아티클에서 필드의 다형성 예제를 위한 Tire, Car 클래스 작성을 진행했습니다. 이어서 Tire를 상속받는 자식 클래스와 실행 클래스에 대해서 살펴보겠습니다. 

 

 

public class Tire {
	// 필드
	public int maxRotation;
	public int accumulatedRotation;
	public String location;
	
	// 생성자
	public Tire(String location, int maxRotation) {
		this.location = location;
		this.maxRotation = maxRotation;
	}
	
	// 메서드
	public boolean roll() {
		++accumulatedRotation;
		if(accumulatedRotation < maxRotation) {
			System.out.println(location + "남은 수명: " + 
			(maxRotation - accumulatedRotation) + "회");
			
			return true;
		} else {
			System.out.println("***" + location + "펑크" + "***");
			
			return false;
		}
	}
}

 

public class Car {
	
	Tire frontLeftTire = new Tire("앞왼쪽", 6);
	Tire frontRightTire = new Tire("앞오른쪽", 2);
	Tire backLeftTire = new Tire("뒤왼쪽", 3);
	Tire backRightTire = new Tire("뒤오른쪽", 4);
	
	
	int run() {
		System.out.println("자동차가 달립니다.");
		
		if(frontLeftTire.roll() == false) {
			stop();
			return 1;
		}
		
		if(frontRightTire.roll() == false) {
			stop();
			return 2;
		}
		
		if(backLeftTire.roll() == false) {
			stop();
			return 3;
		}
		
		if(backRightTire.roll() == false) {
			stop();
			return 4;
		}
		
		return 0;
	}
	
	void stop() {
		System.out.println("자동차가 멈춥니다.");
	}
}

 

 

상속(7) - 필드의 다형성 2

앞선 예제에서, 간단히 Tire와 Car 클래스를 예시로 들어 필드 값의 다형성을 살펴보았습니다. 이제 본격적으로 상세 코드 작성을 통해 다형성을 활용한 프로그램을 짜보도록 하겠습니다. 일단 Tir

nozeroslope.tistory.com

 

 


 

 

이제 Tire 클래스를 상속 받는 HankookTire 클래스와 KumhoTire 클래스를 작성해 보겠습니다. 우선, 해당 두 개의 자식 클래스의 생성자는 Tire와 동일하게 location, maxRotation을 받아서 그대로 부모 클래스에서 정의된 필드에 동일한 방식으로 값을 대입해 줍니다. 그리고, roll( ) 메서드는 오버라이드 하여 약간 출력 내용을 수정해 줍니다. 기본적인 동작은 동일한데, 출력되는 스트링 문구에 각각 HankookTire와 KumhoTire임을 나타내는 문구를 추가해 보도록 하겠습니다. 

 

 

public class HankookTire extends Tire {
	
	// 생성자
	public HankookTire(String location, int maxRotation) {
		super(location, maxRotation);
	}
	
	// 메서드
	@Override
	public boolean roll() {
		++accumulatedRotation;
		if(accumulatedRotation < maxRotation) {
			System.out.println(location + "Hankook Tire 남은 수명: " + 
			(maxRotation - accumulatedRotation) + "회");
			
			return true;
		} else {
			System.out.println("***" + location + "Hankook Tire 펑크" + "***");
			
			return false;
		}
	}
	
}

 

 

public class KumhoTire extends Tire{

	// 생성자
	public KumhoTire(String location, int maxRotation) {
		super(location, maxRotation);
	}
	
	// 메서드
	@Override
	public boolean roll() {
		++accumulatedRotation;
		if(accumulatedRotation < maxRotation) {
			System.out.println(location + "Kumho Tire 남은 수명: " + 
			(maxRotation - accumulatedRotation) + "회");
			
			return true;
		} else {
			System.out.println("***" + location + "Kumho Tire 펑크" + "***");
			
			return false;
		}
	}
	
}

 

 

 


 

 

이제 이 클래스들을 이용해 실행 코드를 작성해 보도록 하겠습니다. 여기서는 심플하게, Car 클래스의 run( )을 실행하고 그 결과에 따라 처리하는 형태로 구현해 보도록 하겠습니다. 

 

public class ExampleMain {	
	public static void main(String[] args) {

		Car car = new Car();
		
		for(int i = 1; i <= 5; i++) {
			int problemLocation = car.run();
			
			switch(problemLocation) {
			
			case 1:
				System.out.println("앞왼쪽 HankookTire로 교체");
				car.frontLeftTire = new HankookTire("앞왼쪽", 15);
				break;
			case 2:
				System.out.println("앞오른쪽 KumhoTire로 교체");
				car.frontRightTire = new KumhoTire("앞오른쪽", 13);
				break;
			case 3:
				System.out.println("뒤왼쪽 HankookTire로 교체");
				car.backLeftTire = new HankookTire("뒤왼쪽", 14);
				break;
			case 4:
				System.out.println("뒤오른쪽 KumhoTire로 교체");
				car.backRightTire = new KumhoTire("뒤오른쪽", 17);
				break;
			}
			
			System.out.println("-----------------------");
		}
	}
}

/*출력
자동차가 달립니다.
앞왼쪽남은 수명: 5회
앞오른쪽남은 수명: 1회
뒤왼쪽남은 수명: 2회
뒤오른쪽남은 수명: 3회
-----------------------
자동차가 달립니다.
앞왼쪽남은 수명: 4회
***앞오른쪽펑크***
자동차가 멈춥니다.
앞오른쪽 KumhoTire로 교체
-----------------------
자동차가 달립니다.
앞왼쪽남은 수명: 3회
앞오른쪽Kumho Tire 남은 수명: 12회
뒤왼쪽남은 수명: 1회
뒤오른쪽남은 수명: 2회
-----------------------
자동차가 달립니다.
앞왼쪽남은 수명: 2회
앞오른쪽Kumho Tire 남은 수명: 11회
***뒤왼쪽펑크***
자동차가 멈춥니다.
뒤왼쪽 HankookTire로 교체
-----------------------
자동차가 달립니다.
앞왼쪽남은 수명: 1회
앞오른쪽Kumho Tire 남은 수명: 10회
뒤왼쪽Hankook Tire 남은 수명: 13회
뒤오른쪽남은 수명: 1회
-----------------------
*/