构造函数是否可以重写?

2022-09-01 04:58:48

我所知道的是,编译器在字节代码中编写默认的无参数构造函数。但是如果我们自己编写它,则该构造函数会自动调用。这种现象是构造函数覆盖的吗?


答案 1

您描述的内容不会覆盖所有内容。如果未指定默认构造函数,编译器将创建默认构造函数。如果它是一个子类,它将调用默认的父构造函数(super()),它还会将所有实例变量初始化为由该类型的默认值确定的默认值(数值类型为0,布尔值为false,对象为null)。

当子类与超类的实例方法具有相同的名称、参数/类型和相同的返回类型时,就会发生重写。在这种情况下,子类将覆盖超类的方法。有关覆盖的信息,请单击此处


答案 2

构造函数不是普通方法,它们不能被“重写”。说构造函数可以被重写意味着超类构造函数是可见的,并且可以调用它来创建子类的实例。这不是真的...默认情况下,子类没有任何构造函数(如果它扩展的类具有无 arg 构造函数,除外)。它必须显式声明任何其他构造函数,并且这些构造函数属于它而不是其超类,即使它们采用与超类构造函数相同的参数。

您提到的关于默认无参数构造函数的内容只是构造函数如何工作的一个方面,与重写无关。