day18_RepairableTest7

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

/**인터페이스의 장점**********************
 * 개발시간을 단축 시킬수 있다.
 * 표준화가 가능하다.
 * 서로 관계없는 클래스들에게 관계를 맺어줄수 있다.
 * 독립적인 프로그램밍이 가능하다.
 */
public class RepairableTest7 {
	public static void main(String[] args) {
		Tank1 tank = new Tank1();
		Dropship1 dropship = new Dropship1();
		
		Marine1 marine = new Marine1();
		SCV1 scv = new SCV1();
		
		scv.reapir(tank);
		scv.reapir(dropship);
		scv.reapir(scv);
	//	scv.reapir(marine);		//에러..marine은 Repairable 인터페이스를 상속 받지 않아서 매개변수로 들어올수 없다.
	}
}

interface Repairable1 {}

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

class GroundUnit1 extends Unit1 {
	GroundUnit1(int hp) {
		super(hp);
	}
}

class AirUnit1 extends Unit1 {
	AirUnit1(int hp) {
		super(hp);
	}
}

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

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

class Marine1 extends GroundUnit1 {

	Marine1() {
		super(40);
		hitPoint = MAX_HP;
	}
}

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

출력결과

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

0개의 댓글

관련 채용 정보