class Home{
void provideshelter(){
//code
}
void Acessroom(){
//code
}
}
class KangVilla extends Home{
void AutomaticGates(){
//code
}
//now KangVilla have more methods than Home,clearly.
public static void main(String[] args){
Home H = new KangVilla();
KangVilla k = (KangVilla) H;// i am having problem with these statements
}
}
問題我已閱讀,在編譯時,編譯器會當我說Home H
僅檢查引用變量而不是實際的object.So這意味着編譯想過^h沒有KangVilla
這是原始one.And它關心只方法,其是可訪問通Home
類型的參考H
並且這些在這種情況下,ok.But它允許的下一個語句是如何將基類型對象分配給父類型引用?
KangVilla k = (KangVilla) H;
現在,這是一個簡單的邏輯k
可以訪問比H
多種方法,因爲它是派生的類的type.So爲什麼編譯器不complaning的基礎是,如果H
轉換爲k
然後(未失去在此轉換「H」上)有可能通過k
訪問更多方法(Home +本地KangVilla),這些方法不可能通過H
訪問?
那麼編譯器如何在不看到實際對象的情況下只看到引用變量來評估這一點?
如果轉換無效,您將在運行時收到異常。 –
@OliCharlesworth我在問編譯器如何驗證? – YakRangi
它沒有。運行時確實。 –