Gop*_*pal 27 java constructor overriding
我所知道的是,编译器在字节码中编写了一个默认的无参数构造函数.但是如果我们自己编写它,那么构造函数会自动调用.这种现象是构造函数的重写吗?
Col*_*inD 23
构造函数不是常规方法,它们不能被"覆盖".假设可以重写构造函数意味着超类构造函数是可见的,可以调用它来创建子类的实例.这不是真的......默认情况下,子类没有任何构造函数(如果它扩展的类有一个,则为无参数构造函数除外).它必须显式声明任何其他构造函数,并且那些构造函数属于它而不属于它的超类,即使它们采用与超类构造函数相同的参数.
你提到的默认没有arg构造函数的东西只是构造函数工作方式的一个方面,与覆盖无关.
sgo*_*les 13
永远不可能.构造函数覆盖在Java中是不可能的.
这是因为,
构造函数看起来像一个方法,但名称应该是类名,没有返回值.
覆盖意味着我们在Super类中声明的内容,我们必须在Sub类中声明它被称为Overriding.超类名称和子类名称是不同的.
如果您尝试在Sub类中编写超类构造函数,则Sub类会将其视为方法而不是构造函数,因为name不应与Sub类名匹配.它会给出一个编译错误,即方法没有返回值.所以我们应该声明为void,然后才会编译.
看看下面的代码:
Class One
{
....
One() { // Super Class constructor
....
}
One(int a) { // Super Class Constructor Overloading
....
}
}
Class Two extends One
{
One() { // this is a method not constructor
..... // because name should not match with Class name
}
Two() { // sub class constructor
....
}
Two(int b) { // sub class constructor overloading
....
}
}
Run Code Online (Sandbox Code Playgroud)