簡體   English   中英

Java轉換,覆蓋和多態

[英]Java casting, overide and polymorphism

在下面的例子中,我認為它是關於運行時多態性的東西,但我無法弄清楚為什么y.m1(x)打印出A 我的理解是y.m1()調用類Bm1()方法,因為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();
        } 
  }

Bm1不會覆蓋Am1方法,因為它沒有采用相同的參數。 所以B類由兩個重載的m1方法組成,一個采用A對象,另一個采用B對象。 這里只能使用靜態多態,這就是為什么你可以看到這種行為。

對象的動態類型(新的類型)是它的實際運行時類型:它定義了對象的實際方法。

對象引用(變量)的靜態類型是編譯時類型:它定義或聲明可以在變量引用的對象上調用哪些方法。

因為動態類型和靜態類型的參數類型不同,所以我們動態類型不會覆蓋該方法,但會使其重載。

如果參數類型相同,則輸出為B ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM