簡體   English   中英

為什么Java中的多態性從超類調用方法

[英]why polymorphism in java call the methods from the superclass

///Example code here
Superclass{ 
    method1(){ 
      print(do1);
     }
    method2(){}
  }
Subclass extends Superclass{
   ///override method1
 method1(){ 
      print(do2);
    }
 method3(){}
 }

我對Java中的多態性有一個疑問,那就是何時Superclass s =new Subclass() “ s”對象總是調用超類中的方法,但是當覆蓋方法發生時,“ s”將指向覆蓋方法。

更新:因此,問題是誰可以為引用“ s”創建堆地址,如果它可以最終編譯並運行。 如果超類創建了它,為什么要使用新的Subclass()而不是新的Superclass()。 如果子類創建了它,為什么不能使用s.method3()。

可以調用method3。 您只需要先投射它即可。 如果他們允許s調用method3作為超類,那是沒有意義的,因為並非所有超類都可以調用method3。

方法的動態綁定將在運行時確定,因此,當您使用s作為超類編譯器的引用調用方法時,將始終首先檢查超類是否具有該方法。 有2種情況

1.如果超類具有方法,則JVM將繼續檢查子類;如果子類具有重寫方法,則將調用該方法;如果子類沒有該方法,則通常將調用父類方法。

2.如果超類沒有該方法,則編譯將失敗,因為編譯器無法在引用變量的類中標識任何方法

因此,在您的情況下,如果超類沒有method3,那么它將反抗地給出編譯錯誤

暫無
暫無

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

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