在java中继承InnerClass
//为什么这是强制性的在java中继承InnerClass,java,inner-classes,Java,Inner Classes,//为什么这是强制性的 public class InnerClass { class Inner { public void method() { System.out.println("Innerclass"); } } } class Sample extends InnerClass.Inner { public static void main(String [] arg)
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();
}
当我创建一个从innerclass(innerclass.Inner)派生的类时,默认构造函数不起作用。后来我才知道,它需要包含一个构造函数来引用封闭类为什么会这样?Java中的非静态内部类有一个对封闭实例的隐式引用。您可以通过以下方式解决您的问题:
Sample(InnerClass i) {
i.super();
}
@Override
public void method() {
System.out.println("derived class");
}
}
只是不要期望在没有特定实例的情况下能够调用InnerClass上的任何方法。因为非静态内部类有一个指向其外部类的隐式成员,如果不给它指针,就无法创建内部类的实例。如果直接创建内部类的实例,则必须使用
new outer.inner()
(或者可能是outer.new inner()
,我永远记不起来了)。但Sample不是一个内部类,它只是继承了一个,所以外部实例必须在其构造函数中传递给基构造函数。因此,它需要有一些外部实例可用,或者自己创建。它告诉新的内部用户你创建的外部实例是什么。你能帮我举个例子说明它的用法吗?你可以看看这里:这里:
public class InnerClass {
static class Inner // can make it public too
{
public void method()
{
System.out.println("Innerclass");
}
}
}