[英]How to access a method from extending class in extended class?
我想使用/調用在Navigation
類中創建的EdumateSuperClass
內部的方法。 那可能嗎? 我嘗試的任何方法均無效。
public abstract class EdumateSuperClass extends ScriptSuperClass
public abstract class Navigation extends EdumateSuperClass
super.clickNewButton();
->對於類型ScriptSuperClass,方法clickNewButton()未定義 附注:如有必要,請更新標題。 不知道我是否使用了正確的術語。
您必須在using類(或其父類)中將方法聲明為抽象方法,並在子類中實現該方法:
public abstract class EdumateSuperClass {
protected abstract void childMethod(String message);
public void callChildMethod() {
childMethod("hello");
}
}
public abstract class Navigation extends EdumateSuperClass {
protected void childMethod(String message) {
System.out.println(message);
}
}
您不能使用super
從EdumateSuperClass
內部調用Navigation
方法。
EdumateSuperClass
是Navigation
的超類。
您的層次結構為: ScriptSuperClass
> EdumateSuperClass
> Navigation
,其中->表示“的基類”或“的超類”。
Navigation
可以使用super.X()
調用的具體方法EdumateSuperClass
,而不是相反。
當您從EdumateSuperClass
內部執行super.clickNewButton()
,它將嘗試從基類ScriptSuperClass
內部調用clickNewButton
方法。 對於ScriptSuperClass
類,此方法是未定義的,因此這就是為什么您會收到該特定錯誤的原因。
編輯:如果需要,您可以讓EdumateSuperClass
保持抽象類,該抽象類聲明一個抽象方法abstractMethod()
而Navigation
是一個具體類,它定義了此方法的具體實現。
您仍然不能使用super
從EdumateSuperClass
調用里面這個方法Navigation
,但是這將允許您使用EdumateSuperClass
分組對象時的基本接口。
即。 您可能有一個EdumateSuperClass
數組,這意味着該數組可以保存從EdumateSuperClass
派生/擴展的具體類對象的EdumateSuperClass
。 為了使這些類具體化,它們必須定義abstractMethod()
。 從那里,您可以將Navigation
對象存儲在該數組中,並從該數組中的任何元素調用abstractMethod()
。
但是,這並不意味着您要從EdumateSuperClass
內部調用abstractMethod()
,它仍將是一個Navigation
對象,其中將包含abstractMethod()
的定義並從自身進行調用。 我不知道這是否使它更清晰。
閱讀多態性 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.