0
當我在java中學習多態概念時,問題就引發了。如以下代碼表示:java如何確定對象的實際類型?
public class test {
public static void main(String[] args){
testF(new B());
}
public static void testF(A a){
a.f();
}
}
class A{
public void f(){System.out.println("method in super class");}
}
class B extends A{
public void f(){System.out.println("mehtod in sub class");}
}
testF方法需要一個類的參數,但我們通過一個類B參考,這是一類的子類。編譯很高興接受它,並且由於多態機制,當我們調用引用'a'上的方法f()時,在「實際類型」中聲明的方法將獲得。我的問題是,當我們將一個新的構建對象B傳遞給testF()時,它已經被上傳到類A,那麼java怎麼才能得到它的實際類型呢?
在Java中調用多態方法時發生* no *轉換。這正是運行時多態性的作用:運行時查看與當前類型關聯的「調度表」(是的,Java將類型信息與每個對象實例存儲在一起[見Object#getClass()'](https:// docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--),例如),其中發出方法調用。 – user2864740