아래와 같이 작성했는데 문제가 Unit u =(Unit)r; 부분입니다. 변수 r이 어차피 Tank t로 받기 때문에 Unit으로 형변환 되는건 알겠습니다만... 왜 (Unit)이 붙어야 하는지 모르겠습니다. Tank보다 Unit이 상위이기 때문에 굳이 (Unit)이 안 붙어도 될 것 같은데 (Unit)이 안 붙으면 컴파일할 때 오류가 발생해요 이유가 뭘까요?? ================================================================================== class Question2 { public static void main(String[] args) { Tank t = new Tank(); SCV scv = new SCV(); scv.repair(t); } } interface Repairable { } class Unit { int hitpoint; final int max_hp; Unit(int hp) { max_hp = hp; } } class Tank extends Unit implements Repairable { Tank() { super(150); hitpoint = max_hp; } public String toString() { return "Tank"; } } class SCV extends Unit implements Repairable { SCV() { super(60); hitpoint = max_hp; } public String toString() { return "SCV"; } void repair(Repairable r) { if(r instanceof Unit) { Unit u; u = (Unit)r; while(u.hitpoint!=u.max_hp) { u.hitpoint++; } System.out.println(u.toString() + "의 수리가 끝났습니다."); } } } |