【问题标题】:Access outer class's methods after extending inner class扩展内部类后访问外部类方法
【发布时间】:2015-09-28 08:54:21
【问题描述】:

我知道我可以从内部类中访问外部类的方法。 像下面的类:

class outer {

    void outerMethod() {}

    class inner {

        void innerMethod() {
            outerMethod();
        }
    }
}

我想知道如果我扩展了内部类,我该怎么做?

我想做以下事情:

class newClass extends outer.inner {

    void innerMethod() {
        outerMethod();
    }
}

我希望能够从newClass 访问method()

【问题讨论】:

  • 对不起,我现在更正了
  • 您希望newClass 包含在outer 类中吗?

标签: java class extend


【解决方案1】:

非静态inner 类的实例需要存在它所属的outer 类实例。
所以要让class newClass extends outer.inner { 编译你要么需要

  1. 将inner 类设为静态,并删除outer 类实例存在的要求(但这也会稍微限制您的类)
  2. 或确保inner 将属于某个outer 实例,您可以通过在扩展此内部类的类的构造函数中调用outerInstance.super() 来做到这一点。

对于选项 2,可能最简单的解决方案是将 outer 的实例显式传递给您的类,例如

class newClass extends outer.inner {

    private outer o;

    public newClass(outer outerInstance) {
        outerInstance.super();
        this.o = outerInstance;
    }

    void innerMethod() {
        o.outerMethod();
    }
}

现在您可以在传递的outer 类实例上简单地调用您的outerMethod()。

但请记住,只有当此方法对您的 newClass 具有适当的可见性时,才能调用 outerMethod。因此,尽管inner 能够使用其外部类的任何方法,但您的newClass 可能无法访问它。

【讨论】:

  • 我认为所有的属性和权限都是通过继承来传递的,但显然内部类继承并非如此。
  • 不,特权不是继承的,这就是为什么扩展内部类很少是好的决定。
猜你喜欢
  • 2013-10-21
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多