Javase内部类:非静态内部类的子类的构造器

新手上路,请多包涵

题目描述

非静态内部类的子类的构造器如何编写

题目来源及自己的思路

非静态内部类的子类构造应该显式用外部类的实例调用非静态内部类的构造方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
package InnerClass;

public class ChildInner {

public ChildInner() {
    System.out.println("这是外部类的构造方法");
}
public class Iiii{
    public Iiii() {
        System.out.println("这是内部类的构造方法");
    }
}

}

package InnerClass;
import InnerClass.ChildInner;

public class Test extends ChildInner.Iiii{

public Test(ChildInner c) {
    c.super();
}
public static void main(String[] args) {
    ChildInner c = new ChildInner();
    Test t = new Test(c);
}

}

你期待的结果是什么?实际看到的错误信息又是什么?

我理解的是Test的构造器中的super就是Iiii的构造器,但是当我把c.去掉时,编译出现错误。错误代码:No enclosing instance of type ChildInner is available due to some intermediate constructor invocation。请问,是我理解错了吗?c.super()这段代码到底是什么意思?

问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

题目描述

题目来源及自己的思路

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 1.5k
1 个回答

因为Iiii是非静态内部类 也就是说它是依托在ChildInner的实例中的,没有ChildInner的实例就没有Iiii 所以你需要提供一个ChildInner 实例 也就是你的代码中的c

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题