java 基类构造函数_关于class:java:为什么我必须在构造函数的第一行写super()...

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Why does this() and super() have to be the first statement in a constructor?

我刚在学校学的,但老师不知道为什么。

我可以考虑一些很好的理由,但我认为有些情况下可以在稍后的构造函数中完成初始化——例如,在使用来自母亲类的变量之前。好的,变量应该从一开始就初始化,但这并不总是必要的。

我想还有更多的原因可以解释为什么必须将super()放在构造函数的第一行。

所以,当我继承一个类时,为什么必须在构造函数的第一行中编写super()?

"并不总是必要的",但你能想出一个不应该的理由吗?

我的意思是:在使用变量或对象之前,可以先声明一行。为什么不能用super()来完成呢?奥德兰给了我一个很好的答案。

在您开始使用自己的类之前,您从中继承的类需要能够完成其构造。

如果不这样做,你可以做很多"坏"的事情,例如

在其构造函数运行之前,将this传递给另一个使用基类的方法。这将打破许多假设

调用尚未正确"设置"的多态函数。除了类本身所做的任何事情之外,实现也可能使用构造函数调用来处理实现内部。

在构建一个对象之前访问它是不好的,就像油炸鸡一样——一个你真的不想在油炸之前访问(吃)那个鸡的鸡。

访问基类试图承诺的基类的protected或public成员变量将始终初始化为某种状态。

对于一个类来说,承诺它的任何实例都将始终处于某个给定状态是完全合理的。如果你有机会在构造函数被调用之前做一些事情,那么就没有办法兑现这样的承诺。本质上,如果"是"的事情还不是真的那样的话,"是"的关系就不会维持下去了!

这解释了很多。谢谢!

除了Advand回答:你不必写Sub(),因为Java编译器会自动调用层次结构中的所有默认构造函数。

例外:如果在基类中没有默认的构造函数,则必须使用super(ConstructorArgs args)调用自定义构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值