day18_RepairableTestEx

육희영·2021년 10월 28일
0
package com.java1.day18;

/* medic을 추가 해보자.
 * medic은 GroundUnit2 유닛에 속한다.
 * medic은 SCV와 Marine 그리고 Medic만 치료할수 있다.
 */

public class RepairableTestEx {
	public static void main(String[] args) {
		Tank2 tank = new Tank2();
		Dropship2 dropship = new Dropship2();
		
		Marine2 marine = new Marine2();
		SCV2 scv = new SCV2();
		
		Medic2 medic = new Medic2();
		
		scv.reapir(tank);
		scv.reapir(dropship);
		scv.reapir(scv);
	//	scv.reapir(medic);	//medic 타입은 Repairable2 타입이 아니라서 에러가 난다.
		
		medic.reapir(marine);	
		medic.reapir(medic);
		medic.reapir(scv);
	}
}

interface Repairable2 {}	//scv, tank, dropship 를 묶어줄 용도로 사용..
interface Repairable3 {}	//scv, marine, medic를 묶어줄 용도로 사용..

class Unit8 {
	int hitPoint;
	final int MAX_HP;
	Unit8(int hp){
		MAX_HP = hp;
	}
}

class GroundUnit2 extends Unit8 {
	GroundUnit2(int hp) {
		super(hp);
	}
}

class AirUnit2 extends Unit8 {
	AirUnit2(int hp) {
		super(hp);
	}
}

class Tank2 extends GroundUnit2 implements Repairable2 {
	Tank2() {
		super(150);		//Tank의 HP는 150 이다.
		hitPoint = MAX_HP;	
	}
	@Override
	public String toString() {
		return "Tank";
	}
}

class Dropship2 extends AirUnit2 implements Repairable2 {
	Dropship2() {
		super(125);	//Dripship의 HP는 125 이다.
		hitPoint = MAX_HP;
	}
	@Override
	public String toString() {
		return "Dropship";
	}
}

class Marine2 extends GroundUnit2 implements Repairable3 {

	Marine2() {
		super(40);
		hitPoint = MAX_HP;
	}
	@Override
	public String toString() {
		return "Marine";
	}
}

class SCV2 extends GroundUnit2 implements Repairable2, Repairable3 {
	SCV2() {
		super(60);
		hitPoint = MAX_HP;
	}
	
	void reapir(Repairable2 r) {
		if( r instanceof Unit8) {
			Unit8 u = (Unit8) r;
			
			while(u.hitPoint != u.MAX_HP) {
				/* Unit의 HP를 증가 시킨다. */
				u.hitPoint++;
			}
			System.out.println(u.toString() + "의 수리가 끝났습니다.");
		}
	}
	@Override
	public String toString() {
		return "SCV";
	}
}

/* medic을 추가 해보자.
 * medic은 GroundUnit2 유닛에 속한다.
 * medic은 SCV와 Marine 그리고 medic만 치료할수 있다.
 */

class Medic2 extends GroundUnit2 implements Repairable3 {
	Medic2() {
		super(100);	//메딕의 체력을 100 으로..
		hitPoint = MAX_HP;
	}
	
	void reapir(Repairable3 r) {
		if( r instanceof Unit8) {
			Unit8 u = (Unit8) r;
			
			while(u.hitPoint != u.MAX_HP) {
				/* Unit의 HP를 증가 시킨다. */
				u.hitPoint++;
			}
			System.out.println(u.toString() + "의 수리가 끝났습니다.");
		}
	}
	@Override
	public String toString() {
		return "Medic";
	}
}

출력결과

Tank의 수리가 끝났습니다.
Dropship의 수리가 끝났습니다.
SCV의 수리가 끝났습니다.
Marine의 수리가 끝났습니다.
Medic의 수리가 끝났습니다.
SCV의 수리가 끝났습니다.

0개의 댓글

관련 채용 정보