繁体   English   中英

为什么子类必须在超类中调用no args构造函数?

[英]why does the subclass have to invoke the no args constructor in the super class?

在下面的代码上,我知道子类中的super(t)显式调用其父类(类B)中的no-args构造函数。 我似乎难以理解的是,为什么子类必须在超类中调用no-args构造函数? 我似乎无法解决这个目的?

public class Test {

    public static void main(String[] args) {

       B b = new B(5);

    }
}
class A extends B {
    public A(int t)  {
        super(t);
        System.out.println("A's constructor is invoked");
    }
}

class B  {



    public B(int k)   {
    System.out.println("B's constructor is invoked");
    }
}

必须先实例化super,然后再将sub之类的sub parent must exists before child

我了解子类中的super(t)会在其> superclass(类B)中显式调用no-args构造函数

super(t)实际上super(5)将调用public B(int k)
super()尝试调用不存在的public B()

注意: 如果类中没有可用的构造函数,则编译器提供no-arg构造函数。

子类中的super(t)显式调用其父类(类B)中的no-args构造函数。

不, super(t)可以重写为B(t) 它正在调用您在代码中显示的构造函数。

我相信你在想什么

如果构造函数未显式调用超类构造函数,则Java编译器会自动将调用插入到超类的无参数构造函数中。

来自http://docs.oracle.com/javase/tutorial/java/IandI/super.html

例如,如果代码未执行super(t) ,则将调用默认的no-args构造函数,但是

如果超类没有无参数的构造函数,则会出现编译时错误

您的B类没有no-args构造函数(该构造函数将不带参数)。 如果有一个,它将由A的构造函数自动调用。 但是在示例中,您必须使用super(t)手动调用它,以指定应使用的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM