package com.java1.day18;
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);
medic.reapir(marine);
medic.reapir(medic);
medic.reapir(scv);
}
}
interface Repairable2 {}
interface Repairable3 {}
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);
hitPoint = MAX_HP;
}
@Override
public String toString() {
return "Tank";
}
}
class Dropship2 extends AirUnit2 implements Repairable2 {
Dropship2() {
super(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) {
u.hitPoint++;
}
System.out.println(u.toString() + "의 수리가 끝났습니다.");
}
}
@Override
public String toString() {
return "SCV";
}
}
class Medic2 extends GroundUnit2 implements Repairable3 {
Medic2() {
super(100);
hitPoint = MAX_HP;
}
void reapir(Repairable3 r) {
if( r instanceof Unit8) {
Unit8 u = (Unit8) r;
while(u.hitPoint != u.MAX_HP) {
u.hitPoint++;
}
System.out.println(u.toString() + "의 수리가 끝났습니다.");
}
}
@Override
public String toString() {
return "Medic";
}
}
출력결과
Tank의 수리가 끝났습니다.
Dropship의 수리가 끝났습니다.
SCV의 수리가 끝났습니다.
Marine의 수리가 끝났습니다.
Medic의 수리가 끝났습니다.
SCV의 수리가 끝났습니다.