728x90
반응형
package chap8;
/*
* 매개변수로 사용되는 인터페이스
*/
class Unit {
int hp;
final int MAX;
Unit(int hp) {
this.hp = hp;
MAX = hp;
}
}
class AirUnit extends Unit {
AirUnit(int hp) {
super(hp);
}
}
class GroundUnit extends Unit {
GroundUnit(int hp) {
super(hp);
}
}
interface Repairable {}
class Tank extends GroundUnit implements Repairable {
Tank() { super(150);}
public String toString() { return "Tank"; }
}
class DropShip extends AirUnit implements Repairable {
DropShip() { super(125);}
public String toString() { return "DropShip"; }
}
class Marine extends GroundUnit {
Marine() { super(40);}
public String toString() { return "Marine"; }
}
class Scv extends GroundUnit implements Repairable {
Scv() { super(60);}
public String toString() { return "Scv"; }
void repair(Repairable r) {
if(r instanceof Unit) {
Unit u = (Unit)r;
u.hp = u.MAX;
// r.hp = r.MAX; //Repairable 인터페이스에 멤버가 없음. r 참조변수로 선택할 수 있는 멤버가 아님.
System.out.println(r + " 수리 완료");
}
}
}
public class InterfaceEx3 {
public static void main(String[] args) {
Tank t = new Tank();
DropShip d = new DropShip();
Marine m = new Marine();
Scv s = new Scv();
s.repair(t); //Tank 객체는 Repairable 객체로 형변환 가능
s.repair(d); //DropShip 객체는 Repairable 객체로 형변환 가능
// s.repair(m); //Marine 객체는 Repairable 객체로 형변환 불가능
s.repair(s); //Scv 객체는 Repairable 객체로 형변환 가능
AAA a = new AAA();
s.repair(a);
}
}
class AAA implements Repairable {
}
728x90
반응형
'study > Java' 카테고리의 다른 글
[Java] 24. Interface5 (default , static) (0) | 2022.03.22 |
---|---|
[Java] 24. Interface4 (인터페이스는 객체화가 안됨) (0) | 2022.03.22 |
[Java] 24. Interface2 (리턴타입이 인터페이스인 경우) (0) | 2022.03.22 |
[Java] 24. Interface1 (인터페이스 예제) (0) | 2022.03.22 |
[Java] 23. 제한자 Exam1 (ARR 배열에 생성자에서 1부터 주어진 숫자까지의 값을 저장하기) (0) | 2022.03.21 |