【问题标题】:Inheriting InnerClass in javajava继承内部类
【发布时间】:2013-05-23 14:11:50
【问题描述】:
public class InnerClass {
    class Inner
    {
        public void method()
        {
            System.out.println("Innerclass");
        }
    }
}

class Sample extends InnerClass.Inner
{
    public static void main(String [] arg)
    {
        Sample s = new Sample(new InnerClass());
        s.method();

    }

//为什么这是强制性的???

    Sample(InnerClass i) {
        i.super();
    }

    @Override
    public void method() {
        System.out.println("derived class");
    }
}

当我创建一个派生自内部类 (Innerclass.Inner) 的类时,默认构造函数不起作用。后来我才知道它需要包含一个构造函数来获取封闭类引用为什么会这样?

【问题讨论】:

标签: java inner-classes


【解决方案1】:

Java 中的非静态内部类具有对封闭实例的隐式引用。您可以通过以下方式解决您的问题:

public class InnerClass {
    static class Inner // can make it public too
    {
        public void method()
        {
             System.out.println("Innerclass");
        }
    }
}

只是不要期望能够在没有特定实例的情况下调用 InnerClass 上的任何方法。

【讨论】:

    【解决方案2】:

    因为非静态内部类有一个隐式成员指向它们的外部类,如果不给它那个指针就不能创建内部类的实例。如果直接创建内部类的实例,则必须使用new outer.Inner()(或者可能是outer.new Inner(),我记不得了)。但是 Sample 不是内部类,它只是继承了一个,因此外部实例必须在其构造函数中传递给基构造函数。因此,它需要有一些可用的外部实例,或者自己创建它。

    【讨论】:

    • 它告诉新的 Inner 你创建了它的外部实例是什么。
    • 你能帮我举个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多