簡體   English   中英

從超類方法調用子類方法?

[英]Call subclass method from a superclass method?

我的應用程序的結構類似於:

class Father{
a(){ ... }

b(){a();}
}

class Son extends Father{
a(){ ..... }} //override

b() 未被覆蓋。 當我創建 Son 的實例並調用 b() 時,會調用父親的 a(),但我希望它執行 Son 實例(如果 object 是 Son)。 可能嗎?

否/是

  • 否:“當我創建 Son 的實例並調用 b() 時,會調用父親的 a(),”這是錯誤的!
  • 是的:“但我希望它執行兒子(如果 object 是兒子)。有可能嗎?” -- 那就是Java的行為

如果a不是 static 方法,那么 java 使用動態綁定,所以調用了兒子的a()方法。

new Son().b()將調用 Son 中的方法a() 這稱為動態綁定。

兒子的a方法應該被調用。 如果不是,那么您要么沒有在Son的實例上進行操作,要么您沒有正確覆蓋該方法。 如果簽名不完全相同,則可能會發生這種情況。 我會仔細檢查您的實現簽名是否完全相同。 另外,嘗試在 a 的Son實現上方拋出a @Override並查看是否出現編譯錯誤。 如果你這樣做了,那么你就沒有正確地覆蓋該方法。

像這樣

class Son extends Father{
  @Override
  a(){ ...}
}

此外, a必須是受保護的或公有的(包私有,默認情況下,僅當FatherSon在同一個包中時才有效)。 Son必須能夠“看到” a()方法。

你所擁有的應該是正確的。 方法調用是惰性綁定的。 這意味着當您在Son object 中的任何位置調用方法a()時,將調用Son的方法。

重載的方法在運行時解析,而重載的方法在編譯時解析。 因此,只需調用 new Son().a() 就足夠了。

暫無
暫無

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

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