黑马程序员技术交流社区

标题: 构造器Constructor是否可被override [打印本页]

作者: 孙天    时间: 2012-4-24 20:45
标题: 构造器Constructor是否可被override
构造器可否被重载?
作者: 李震 李震 李震    时间: 2012-4-24 20:52
  构造器可以被重载但不能被重写,重载和重写都是java中多态的不同表现,重写方法名相同,参数相同,返回类型相同,而重载的话,是方法名相同,参数不同,返回类型不可以同。
作者: 毕博    时间: 2012-4-24 21:09
不可以 ,每一个类必须有自己的构造函数,负责构造自己这部分的构造

子类不会覆盖父类的构造函数,相反必须负责在一开始调用父类的构造函数
Constructor不能被继承,所以Constructor也就不能被override,但是可以overload,所以你可以看到有多个构造函数这种情况。
作者: τ、高童鞋ゝ    时间: 2012-4-24 21:12
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
构造器不能是native,final,static,synchronized 的,可以是public,private,或什么都没有。
构造器函数里可以写return呢,但后面什么都不许有(包括null)
构造器不能返回值. 但如果有个"构造器"返值了,它就不是构造器了,只是个普通方法
super();this();这两个方法只能在构造方法里调用.
成员变量声明时候赋值,比构造函数还早.


作者: 高彰谦    时间: 2012-4-25 05:18
再简单不过,重写是指方法名与签名都相同的情况下,而父类与子类的类名都不同,构造函数名必须不同,所以不能重写。
作者: 王勃    时间: 2012-4-25 07:21
本帖最后由 王明(1988) 于 2012-4-25 07:23 编辑

嗯,楼主override是重写的意思,不是重载。
类中的构造函数当然是不会被重写的,但是你可以重载他,在类中重载参数不同的构造器。即便这个类有子类,子类也不能重写父类的构造器,因为名字不会一样滴。。

因为重写是出现在子类或者接口的实现类中的,而重载是出现在同一个类中的。那么override什么时候用呢,
当你在子类或者接口实现类中重写父类(或接口)的方法时,在代码上方加上@override编译器会检测你重写的方法是否写错了。
如果你不加@override也ok,也是重写,但是如果你不小心写错了方法就郁闷了,编译器会将他当做你重新写的方法,而不是重写了。
举一个例子:假如不使用@override,你要重写父类的toString()方法,但是你在重写时写成了tostring(),(注意S小写了)那么编译器会将它当做新的方法对待并不报错。
可是你的愿望是覆写父类的toString(),由于你将S小写的缘故,未能实现,那么你这个时候就非常适合用@override来帮你检查是否重写ok。
作者: 林德燚    时间: 2012-4-25 09:53
1、override 是覆写而不是重载;
2、构造器不可以被覆写,因为构造函数的特殊的组成,方法名和类名一致,无返回值类型;子类怎么覆写它,子类的构造函数也必须与它类名一致。
3、如果你问的是重载,构造函数它也是个方法,重载是方法都具备的;所以构造函数是可以重载的;





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2