繁体   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