본문 바로가기
study/Java

[Java] 24. Interface3 (매개변수로 사용되는 인터페이스)

by 금이패런츠 2022. 3. 22.
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
반응형