在父類轉換到子類時會發生ClassCastException異常,當你面對一個工程時成千上百的類時,
是不太容易發現類之間的關系的,所以即使知道該原則,有時候還是避免不了,那應該如何處理呢:
SuperClass
public class SuperClass { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
SubClass
public class SubClass extends SuperClass { private String performance; public String getPerformance() { return performance; } public void setPerformance(String performance) { this.performance = performance; } }
測試
public static void main(String[] args) { SuperClass superClass = new SuperClass(); SubClass subClass = (SubClass) superClass; subClass.setName("abc"); System.out.println(subClass.getName()); }
上述代碼如約拋出了ClassCastException,怎么避免?
在每次進行強制轉換時使用instanceof判斷一下是否存在關系,然后再進行轉換。
if(superClass instanceof SubClass){ subClass = (SubClass) superClass; subClass.setName("abc"); System.out.println(subClass.getName()); }
即當每次想把一個對象轉換為另一個類的實例的時候,先判斷該對象是否是目標類的一個實例,
這樣就能避免這樣的錯誤。