지난 아티클에서 필드의 다형성 예제를 위한 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("자동차가 멈춥니다.");
}
}
이제 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회
-----------------------
*/
'Programming > JAVA' 카테고리의 다른 글
상속(9) - 파라미터의 다형성 (0) | 2023.03.06 |
---|---|
상속(8) - 배열을 이용한 객체 관리 (0) | 2023.03.03 |
상속(7) - 필드의 다형성 2 (0) | 2023.03.01 |
상속(7) - 필드의 다형성 1 (0) | 2023.02.28 |
상속(6) - 타입 변환과 다형성 3 (0) | 2023.02.27 |