簡體   English   中英

如何從擴展類中的擴展類訪問方法?

[英]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);
    }
}

不能使用superEdumateSuperClass內部調用Navigation方法。

EdumateSuperClassNavigation的超類。

您的層次結構為: ScriptSuperClass > EdumateSuperClass > Navigation ,其中->表示“的基類”或“的超類”。

Navigation可以使用super.X()調用的具體方法EdumateSuperClass ,而不是相反。


當您從EdumateSuperClass內部執行super.clickNewButton() ,它將嘗試從基類ScriptSuperClass內部調用clickNewButton方法。 對於ScriptSuperClass類,此方法是未定義的,因此這就是為什么您會收到該特定錯誤的原因。


編輯:如果需要,您可以讓EdumateSuperClass保持抽象類,該抽象類聲明一個抽象方法abstractMethod()Navigation是一個具體類,它定義了此方法的具體實現。

您仍然不能使用superEdumateSuperClass調用里面這個方法Navigation ,但是這將允許您使用EdumateSuperClass分組對象時的基本接口。

即。 您可能有一個EdumateSuperClass數組,這意味着該數組可以保存從EdumateSuperClass派生/擴展的具體類對象的EdumateSuperClass 為了使這些類具體化,它們必須定義abstractMethod() 從那里,您可以將Navigation對象存儲在該數組中,並從該數組中的任何元素調用abstractMethod()

但是,這並不意味着您要從EdumateSuperClass內部調用abstractMethod() ,它仍將是一個Navigation對象,其中將包含abstractMethod()的定義並從自身進行調用。 我不知道這是否使它更清晰。

閱讀多態性

暫無
暫無

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

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