簡體   English   中英

為什么超類的方法而不是子類的方法被調用?

[英]Why does superclass's method get called instead of subclass's?

我有一個帶有“ update()”成員函數的基本“節點”類

現在,我還有其他類可以擴展'node'類並覆蓋'update'類。

但是我所有的“節點”都存儲在一個數組(“節點”類型)中,它們都依次被“更新”。

問題是它調用了基節點類更新而不是我的重寫函數。

我究竟做錯了什么? (我有@Override並且函數是相同的名稱,返回類型並具有相同的參數)

抱歉,我正在編輯備份文件。 現在工作。 實在抱歉

您應該聲明派生類型的數組

我了解您擁有的是:

Node[] array = {new node1, new node2}

你應該有:

Node[] array = {new derived, derived} 

問題的關鍵是實例化派生類型的對象,但將它們視為節點。

例如

void foo (Node node){
  node.update()
}

bar(){
   foo (new Node())
   foo (new Derived())
}

在調用該函數之前,請嘗試檢查節點的子類型並進行強制轉換。

暫無
暫無

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

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