所以不管物件o的型別是什麼,看物件就對了。
interface Foo{ }
class Alpha implements Foo{ }
class Beta extends Alpha{ }
public class Delta extends Beta{
public static void main(String[] args){
Beta x = new Beta();
Foo f = (Delta)x; //這行註解起來可順利執行
Foo ff = (Alpha)x;
Beta b = (Beta)(Alpha)x; //這行能過
}
}
上面程式碼可順利編譯(因為…我也不知道),但執行只有第7行會出現下面的例外
Exception in thread "main" java.lang.ClassCastException: Beta
at Delta.main(Delta.java:7)
Beta b = (Beta)(Alpha)x;
//這行能過是因為x指向的物件是Beta,用instanceof來測試,x is-a Alpha,x is-a Beta,都可以通過IS-A的測試。
Foo f = (Delta)x;
不能通過的原因是,x is-a Delta,不能通過IS-A測試。
沒有留言:
張貼留言