为什么子类不传值的时候不能有父类的有参构造函数?

问题描述 投票:0回答:1
class a{
    a(int age){}
}
class b extends a{}
public class HelloWorld {
    public static void main(String[] args) {
        b var1=new b();
        System.out.println("Try programiz.pro");
    }
}

上面的代码不起作用。如果我在子类构造函数中包含语句 super(10),它就起作用。

但是 a 中没有任何构造函数,它的工作原理如下

class a{}
class b extends a{}
public class HelloWorld {
    public static void main(String[] args) {
        b var1=new b();
        System.out.println("Try programiz.pro");
    }
}

如果那是因为我们需要在第二段代码中提供超类的默认构造函数,我们没有指定构造函数,但它仍然有效。你能解释一下为什么吗?

java inheritance parameter-passing
1个回答
0
投票

子类构造函数中的第一行必须是超类构造函数的调用。如果子类构造函数没有显式调用超类构造函数,Java 编译器会自动包含对超类的零参数构造函数的调用。如果没有这样的构造函数,则会导致编译时错误。这正是您所描述的以及您的示例中的代码所发生的情况。

阅读 this 了解有关

super()
和子类构造函数的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.