java显式构造函数_什么时候需要显式调用超类构造函数?

问题

所以说我有一个扩展超类的子类。在什么情况下我需要显式地输入super()才能运行超类构造函数?

我正在看一本关于抽象类的书中的例子,当他们用非抽象子类扩展它时,子类的默认构造函数是空白的,并且有一个注释表明将调用超类的默认构造函数。与此同时,我也看到了这里的实例,其中某人的问题没有明确地调用super()。

区别于从子类的默认/非默认构造函数调用超类的默认/非默认构造函数?

#1 热门回答(138 赞)

你只需要

super();

如果你没有指定其他内容,那就是那里的内容。 Youonlyneed指定要调用的构造函数,如果:

你想调用具有参数的超类构造函数

你希望链接到同一个类中的另一个构造函数而不是超类构造函数

你声称:

与此同时,我也看到过这里的实例,其中某人的问题没有明确地调用super()。

你能举一个例子吗?我无法想象这有多可能......

#2 热门回答(10 赞)

如果没有显式调用超级构造函数,则将调用参数less constructor(super())。这意味着如果没有可访问的无参数的构造函数,则必须自己调用特定的构造函数。

但是,即使你可以使用默认构造函数,也经常需要不同的构造函数 - 取决于你的代码。

另请注意,如果没有声明构造函数,编译器会自动生成一个公共默认构造函数,但只要编写自己的构造函数,就不会再发生这种情况。

#3 热门回答(4 赞)

始终在子类的构造函数中调用super()方法,即使它没有在代码中显式编写。

你需要编写它的唯一时间是,如果超类中有多个super(...)方法具有不同的初始化参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值