java:为什么我必须在构造函数的第一行写super()
可能重复:java:为什么我必须在构造函数的第一行写super(),java,class,inheritance,Java,Class,Inheritance,可能重复: 我刚在学校学的,但老师不知道为什么 我可以想出一些很好的理由,但我认为有些情况下,初始化可以在构造函数中稍后完成——例如,在使用母类中的变量之前。好的,变量应该从一开始就初始化,但这并不总是必要的 我猜还有更多的原因说明为什么必须将super()放在构造函数的第一行 那么,当我继承一个类时,为什么我必须在构造函数的第一行中编写super()?在您开始处理自己的类之前,您从中继承的类需要能够完成其构造 如果不这样做,你可能会做很多“糟糕”的事情,例如 在构造函数运行之前,将此传递给其
我刚在学校学的,但老师不知道为什么 我可以想出一些很好的理由,但我认为有些情况下,初始化可以在构造函数中稍后完成——例如,在使用母类中的变量之前。好的,变量应该从一开始就初始化,但这并不总是必要的 我猜还有更多的原因说明为什么必须将super()放在构造函数的第一行
那么,当我继承一个类时,为什么我必须在构造函数的第一行中编写super()?在您开始处理自己的类之前,您从中继承的类需要能够完成其构造 如果不这样做,你可能会做很多“糟糕”的事情,例如
受保护的
/公共
基类试图承诺的成员变量将始终初始化为某个状态
类承诺它的任何实例都将始终处于某个给定状态是完全合理的。如果在调用构造函数之前有机会做一些事情,那么就没有办法兑现这样的承诺。本质上,如果“is-a”关系是“is-a”关系,那么它实际上就不会成立“那还不是真的吗 在您开始使用自己的类之前,您从中继承的类需要能够完成其构造 如果不这样做,你可能会做很多“糟糕”的事情,例如
受保护的
/公共
基类试图承诺的成员变量将始终初始化为某个状态
类承诺它的任何实例都将始终处于某个给定状态是完全合理的。如果在调用构造函数之前你有机会做一些事情,那么就没有办法兑现这样的承诺。从本质上说,如果“是”的东西实际上还不是那个东西,那么“是-是”的关系就不会真正成立 除了awoodlands之外,回答:您不必编写super(),因为Java编译器将自动调用层次结构上的所有默认构造函数
异常:如果基类中没有默认构造函数,除了awoodland之外,还必须使用
super(ConstructorArgs)
调用自定义构造函数回答:不必编写super(),因为Java编译器将自动调用层次结构上的所有默认构造函数
异常:如果基类中没有默认构造函数,则必须使用
super(ConstructorArgs)调用自定义构造函数“并非总是必需的”;但是你能想出一个不应该这样做的原因吗?我的意思是:你可以在使用变量或对象之前声明一行。那么,为什么不能用super()实现这一点呢?阿伍德兰德给了我一个很好的回答,“不一定必要”;但是你能想出一个不应该这样做的原因吗?我的意思是:你可以在使用变量或对象之前声明一行。那么,为什么不能用super()实现这一点呢?阿伍德兰德给了我一个非常好的答案。这解释了很多。谢谢根据@quaylar的回答(这应该是一个注释,因为它在回答问题时不完整),在超类没有构造函数参数的构造函数开头编写super()
,这只是噪音,是不必要的。你能把这个加到你的答案里吗?这解释了很多。谢谢根据@quaylar的回答(这应该是一个注释,因为它在回答问题时不完整),在超类没有构造函数参数的构造函数开头编写super()
,这只是噪音,是不必要的。你能把这个加到你的答案里吗?