隐式调用超类中的无参数构造函数

马赫·阿伯特拉(Maher Abuthraa)

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

注意:如果构造函数未明确调用超类构造函数,则

Java编译器会自动插入对的无参数构造函数的调用

超类。如果超类没有无参数的构造函数,

您将得到一个编译时错误。对象确实具有这样的构造函数,所以

如果Object是唯一的超类,则没有问题。

我做了这个小例子来测试:

P类为超类(其空类):

package org.standro.com.pk1;


public class P {
}

和类N在不同的包中,类N扩展了类P,而没有显式调用super():

import org.standro.com.pk1.P;


public class N extends P {

    public N() {
        //imlicitly super() is called here .. that means the constructor of P 

    }

    public static void main(String[] arg){
    N n=new N();

    }
}

且没有编译错误。.我使用JDK1.7,此示例有什么问题,为什么我没有收到错误?

我认为上述粗体字应为:

如果超类没有任何构造函数,则...

因为如果至少有一个构造函数,编译器将报错。

或者如果有人有解释..

谢谢

阿努比(Anubian Noob)

由于类P扩展了对象,并且没有构造函数,因此它的构造函数默认为no参数构造函数,该构造函数隐式调用Object中的构造函数。

要导致错误,您需要像这样向P的构造函数添加一个参数:

public class P {

    public P(int a) {
    }
}

现在N试图隐式调用在P中寻找无参数构造函数的super()。但是,由于我们在P中添加了构造函数,因此无法再使用默认的无参数构造函数。

说明:

如果没有构造函数,则默认添加no-arg一个。如果存在任何类型的构造函数,则不添加默认的no-arg构造函数

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

与基类构造函数相比,何时调用Java隐式构造函数?

在构造函数中调用this()隐式调用super()是真的吗?

您何时需要显式调用超类构造函数?

从Java中的子类构造函数调用超类

无参数构造函数调用2参数构造函数

子类构造函数上的“ this”关键字是否需要隐式定义超类默认构造函数?

调用超类构造函数

Axon使用无参数构造函数隐式实例化另一个聚合

Java中的每个构造函数都会隐式调用Object的构造函数吗?

调用隐式删除的默认构造函数

超类构造函数调用应在构造函数主体中

Scala中的隐式抽象类构造函数参数和继承

通过方法/构造函数参数隐式与隐式使用

C#使用当前类的参数和无参数构造函数调用基本构造函数

从超类的构造函数中调用子类的构造函数

Java:从超类构造函数中的子类调用的方法

在Scala的构造函数中扩展具有隐式参数的类的惯用方式是什么?

让隐式派生类构造函数调用基类构造函数

为什么类中的ostringstream类型的成员导致“调用隐式删除的复制构造函数”错误?

C ++为什么基类/结构构造函数不能有多个参数可以从派生隐式调用?

如何在结构中调用静态无参数构造函数?

如何隐式调用父类的构造函数

超类中定义的隐式转换

隐式类中的Scala按名称调用构造函数参数

Scala类构造函数中的隐式对象

如何在Python类函数中隐式传递参数

C++在初始化类实例时隐式调用类成员的构造函数

为什么需要在构造函数中调用超类?

隐式调用复制构造函数?