我想使用/调用我在EdumateSuperClass
类中创建的Navigation
内的方法。那可能吗?我试过的任何东西都不起作用。
public abstract class EdumateSuperClass extends ScriptSuperClass
public abstract class Navigation extends EdumateSuperClass
super.clickNewButton();
- >对于ScriptSuperClass类型PS如有必要,请更新标题。不确定我是否使用了正确的术语。
答案 0 :(得分:3)
您必须在using类(或其父类)中将该方法声明为abstract,并在子类中实现它:
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);
}
}
答案 1 :(得分:3)
您无法使用super
从Navigation
内部调用EdumateSuperClass
方法。
EdumateSuperClass
是Navigation
的超类。
您的层次结构是:ScriptSuperClass
- > EdumateSuperClass
- > Navigation
,其中 - >表示“基类”或“超类”。
Navigation
可以使用super.X()
来调用EdumateSuperClass
的具体方法,不反之亦然。
当您从super.clickNewButton()
内部执行EdumateSuperClass
时,它会尝试从基类clickNewButton
内部调用方法ScriptSuperClass
。对于类ScriptSuperClass
,此方法是 undefined ,因此这就是您遇到特定错误的原因。
编辑:如果你愿意,你可以让EdumateSuperClass
保持一个抽象类,它声明一个抽象方法abstractMethod()
和Navigation
是一个定义具体实现的具体类这种方法。
您仍然无法使用super
中的EdumateSuperClass
在Navigation
内调用此方法,但这样您就可以使用EdumateSuperClass
基本上是分组对象时的接口。
即。您可以拥有一个EdumateSuperClass
数组,这意味着此数组可以保存从EdumateSuperClass
派生/扩展的具体类对象的引用。要使这些类具体,他们必须定义abstractMethod()
。从那里,您可以在该数组中存储Navigation
个对象,并从该数组中的任何元素调用abstractMethod()
。
但是,这并不意味着您从abstractMethod()
内部调用EdumateSuperClass
,它仍然是Navigation
对象,其中包含abstractMethod()
的定义并从自己那里呼唤。我不知道这是否更清楚。
阅读polymorphism。