如何从扩展类中扩展类访问方法?

时间:2011-11-03 01:28:32

标签: java class

我想使用/调用我在EdumateSuperClass类中创建的Navigation内的方法。那可能吗?我试过的任何东西都不起作用。

public abstract class EdumateSuperClass extends ScriptSuperClass

public abstract class Navigation extends EdumateSuperClass
  • super.clickNewButton(); - >对于ScriptSuperClass类型
  • ,方法clickNewButton()未定义

PS如有必要,请更新标题。不确定我是否使用了正确的术语。

2 个答案:

答案 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)

无法使用superNavigation内部调用EdumateSuperClass方法。

EdumateSuperClassNavigation的超类。

您的层次结构是:ScriptSuperClass - > EdumateSuperClass - > Navigation,其中 - >表示“基类”或“超类”。

Navigation可以使用super.X()来调用EdumateSuperClass具体方法,反之亦然。


当您从super.clickNewButton()内部执行EdumateSuperClass时,它会尝试从基类clickNewButton内部调用方法ScriptSuperClass。对于类ScriptSuperClass,此方法是 undefined ,因此这就是您遇到特定错误的原因。


编辑:如果你愿意,你可以让EdumateSuperClass保持一个抽象类,它声明一个抽象方法abstractMethod()Navigation是一个定义具体实现的具体类这种方法。

您仍然无法使用super中的EdumateSuperClassNavigation内调用此方法,但这样您就可以使用EdumateSuperClass基本上是分组对象时的接口。

即。您可以拥有一个EdumateSuperClass数组,这意味着此数组可以保存从EdumateSuperClass派生/扩展的具体类对象的引用。要使这些类具体,他们必须定义abstractMethod()。从那里,您可以在该数组中存储Navigation个对象,并从该数组中的任何元素调用abstractMethod()

但是,这并不意味着您从abstractMethod()内部调用EdumateSuperClass,它仍然是Navigation对象,其中包含abstractMethod()的定义并从自己那里呼唤。我不知道这是否更清楚。

阅读polymorphism