[英]Java casting, overide and polymorphism
在下面的例子中,我認為它是關於運行時多態性的東西,但我無法弄清楚為什么y.m1(x)
打印出A
我的理解是y.m1()
調用類B
的m1()
方法,因為y
包含B
的對象。 由於x
作為參數傳遞給它,並且它屬於比B
寬的類A
,它不會導致運行時錯誤嗎? 另外z.m1(y)
怎么打印A
?
提前謝謝了!
class A {
public void m1(A a) {
System.out.println("A");
}
}
class B extends A {
public void m1(B b) {
System.out.println("B");
}
}
class D2 {
public static void main(String[] args) {
A x = new A();
A y = new B();
B z = new B();
}
}
B
的m1
不會覆蓋A
的m1
方法,因為它沒有采用相同的參數。 所以B類由兩個重載的m1
方法組成,一個采用A
對象,另一個采用B
對象。 這里只能使用靜態多態,這就是為什么你可以看到這種行為。
對象的動態類型(新的類型)是它的實際運行時類型:它定義了對象的實際方法。
對象引用(變量)的靜態類型是編譯時類型:它定義或聲明可以在變量引用的對象上調用哪些方法。
因為動態類型和靜態類型的參數類型不同,所以我們動態類型不會覆蓋該方法,但會使其重載。
如果參數類型相同,則輸出為B ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.