You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse中Java 8使用super()及实例化内部子类报错咨询

解决你的Java代码错误问题

我来帮你拆解代码里的两个核心问题,一步步解决它们:

问题1:普通方法中错误调用父类构造器

你在childMethod()里写的super(10)是语法错误——super(参数)只能用于子类构造方法的第一行,用来调用父类的对应构造器,普通成员方法里根本不能这么用。

如果你是想调用父类那个带int参数的parentMethod方法,应该写成:

super.parentMethod(10);

问题2:非静态内部类无法在静态方法中直接实例化

你的Parent和Child都是Example类的非静态内部类,这类内部类的对象必须依赖外部类Example的实例才能创建。而main方法是静态方法,不属于任何Example实例,所以直接new Child()会报错。

解决这个问题有两种常用方案:

  • 方案一:把内部类改为静态内部类(推荐),给Parent和Child都加上static修饰符,这样静态内部类不依赖外部类实例,就能在main里直接创建对象;
  • 方案二:在main里先创建Example的实例,再通过它创建内部类对象:
    new Example().new Child();
    

修正后的完整代码

这里采用方案一(静态内部类),同时修正构造器调用的问题:

public class Example{
    // 改为静态内部类
    static class Parent{
        void parentMethod(){
            System.out.println("Parent Method");
        }
        void parentMethod(int a){
            System.out.println("Parent Method: One Argument");
        }
        void parentMethod(int a, int b){
            System.out.println("Parent Method: Two Argument");
        }
    }
    // 改为静态内部类
    static class Child extends Parent{
        void childMethod() {
            // 正确调用父类带参方法
            super.parentMethod(10);
            System.out.println("Child Method");
        }
    }
    public static void main(String[] args) {
        Child child = new Child();
        child.childMethod(); // 可以调用子类方法验证效果
        System.out.println("Main Class Method: no argument");
    }
}

运行这段代码后,你会看到输出:

Parent Method: One Argument
Child Method
Main Class Method: no argument

内容的提问来源于stack exchange,提问作者Susobhan Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:12:49