![](/img/trans.png)
[英]Using “super” keyword or using a superclass instance when calling superclass methods locally in a method from subclass?
[英]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.