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
相关产品推荐
相关产品推荐

