[英]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.