簡體   English   中英

用這個。 或超級。 調用存在於超類和子類中的方法時

[英]Using this. or super. when calling a method that exist in a superclass and a subclass

有一個名為Champion的類,它有一個Skill數組作為實例變量。

它實現了一個名為“public final Skill [] getSkills()”的方法,其中Skill []是另一個名為Skill的對象的數組。

有一個名為Support的子類實現了一個名為“public final boolean canHeal()”的方法,它檢查方法canHeal中的技能數組。

我應該寫“Skill [] x = this.getSkills()”或:Skill [] x = super.getSkills()“來獲取技能數組以及為什么?

請記住,方法getSkills僅在類Champion中定義,而不在類Support中重寫。

提前致謝。

super關鍵字允許您調用類重寫或鏡像的方法的基類版本。

如果你的類沒有單獨的getSkills()方法,那么super將沒有任何效果。

我認為最好在沒有super情況下調用該函數。

首先 - 目前現在存在差異。 將來,如果你在課堂上重寫這個功能,很難發現(或者至少需要注意)。

如果你覆蓋你的函數,你可能想在其中調用super.getSkills()

你不應該這樣做。 添加this. 是多余的,加入super. 如果在將來你覆蓋getSkills()可能會破壞你的課程。 所以這樣做:

Skill[] x = getSkills();

在當前情況下,它將簡單地調用超類中定義的方法,如果將來您有理由覆蓋getSkills() (例如,因為您的類使用不同的方式,或具有其他條件),它將自動使用; 這比繼續調用超類方法更可能是正確的行為。

通常,如果需要,只應在重寫方法中調用super.someMethod() (例如,不要復制某些邏輯或副作用)。 只有在確定不需要自己的實現時,才應該在另一種方法中使用它,而不是超類的實現。

我認為你可以使用,因為支持是冠軍,但使用super.getSkills會使代碼更清晰,你在超類中調用一個方法。

暫無
暫無

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

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