Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中继承InnerClass_Java_Inner Classes - Fatal编程技术网

在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");
        }
    }
}