【问题标题】:Overriding a method of a super class of an extended class覆盖扩展类的超类的方法
【发布时间】:2014-06-13 16:19:56
【问题描述】:

是否可以覆盖扩展类的超类的方法?

示例如下:

public class ApplicationModuleImpl {
    protected void prepareSession(oracle.jbo.Session p1) { 
        // Preparing the session
    }
}

public class BaseModuleImpl extends ApplicationModuleImpl {

}

BaseModuleImpl 类没有覆盖ApplicationModuleImpl 的任何方法,那么我有:

public class MyClass extends BaseModuleImpl {
    protected void prepareSession(Session session) {
        super.prepareSession(session);
    }
}

这真的会覆盖该方法吗?

编辑:

我在 jdeveloper 中使用带有面孔的 ADF,并且我正在扩展您可以看到 applicationModule 类,而我的类扩展了扩展类。如果方法prepareSession覆盖,则必须调用它,它根本不会被调用。
为什么在加载时没有调用它,因为它正在扩展 ADF ApplicationModuleImpl ??

【问题讨论】:

标签: java oracle-adf extends overriding


【解决方案1】:

是的,这是覆盖该方法,因为 MyClass 从 BaseModuleImpl 继承其属性,而 BaseModuleImpl 又从 ApplicationModuleImpl 继承。但请记住,super 调用最直接的父级。所以如果你在 BaseModuleImpl 中重写了 prepareSession,那么 MyClass 的 prepareSession 会调用 BaseModuleImpl 的 prepareSession。

【讨论】:

  • 你能改写你的问题吗?我没有得到你的要求。
  • 所以你的意思是 ApplicationModuleImpl 的 prepareSession 没有被调用?
  • 我不明白。唯一无法访问受保护方法的情况是,它被不在同一个包中的类调用,除非调用的类是 MyClass 的子类。你确定你没有遗漏任何东西吗?
【解决方案2】:

是的,你可以,因为MyClass 本质上也扩展了ApplicationModuleImplApplicationModuleImpl 类也被视为MyClass 的父类。

【讨论】:

    【解决方案3】:

    是的,你可以将超类的方法重写为子类。

    方法覆盖本身就是:The specific implementation of the method that has been provided by one of its parent class, it is known as Method Overriding.

    要了解有关覆盖的更多信息,请参阅Java - Overriding

    另外参考Why is super.super.method(); not allowed in Java?这个问题可能对你有帮助。

    【讨论】:

    • @GingerHead 我已经编辑了我的答案并给出了一个链接。我认为这个问题可能会对你有所帮助。