簡體   English   中英

在動態創建實例時,在Java中調用了什么?

[英]What is it called in Java when you create an instance on the fly?

在代碼中,

class MyObject {
   public String doThing() {
      return "doh";
   }
}

class MyClass {
   private myObject = null;
   public MyClass() {
       myObject = new MyObject() {
           public String doThing() {
              return "huh?";
           }
       };
   }

當為myObject分配一個新對象時它叫什么? 我在技術上試圖找出'doThing'是否覆蓋了MyObject中的方法,或者是否重新定義了它,但我不知道要搜索什么來找到答案 - 並且不知道在不知道它是什么的情況下要問什么問題在動態創建對象的新實例並為其提供實現時調用。

您正在創建一個匿名內部類 ,它是MyObject的子類,所以是的,您正在覆蓋doThing方法,如果是您要求的那樣。

順便說一句,匿名類就像命名類一樣,它們在.class文件中有自己的字節碼,它們的名字就像它們的后綴類,后綴是美元符號和數字。

如果您想自己進行實驗,可以使用myObject getClass()方法並提取有關它的信息,如名稱,父級,實現的接口,泛型參數等。

這被稱為匿名內部類。

鑒於doThing()方法與其超類中的公共方法具有相同的簽名,它會覆蓋它。

確保最好的方法是將@Override注釋添加到子類中的方法:如果帶有此注釋的方法不覆蓋任何方法,編譯器將生成編譯錯誤。

此結構的名稱是Anonymous內部類

您可以在Google上找到大量有關這些內容的文檔

在Java中,所有非最終實例方法都受到覆蓋(即虛擬)。 這同樣適用於內部類,因此您的代碼會覆蓋MyObjectdoThing()方法。

是的,重寫了doThing()方法。 這相當於一個匿名類,它繼承MyObject的行為然后重寫它。

暫無
暫無

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

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