A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

种法腾

初级黑马

  • 黑马币:0

  • 帖子:29

  • 精华:0

一个类的构造方法可以被子类override吗??

6 个回复

正序浏览
谢谢了
回复 使用道具 举报
本帖最后由 曹晓涵 于 2012-3-4 18:21 编辑

一)方法的重写
1)在子类中可以根据需要对从父类中继承来的方法进行重写。
2)重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
3)重写方法不能使用比被重写方法更严格的方法权限


二)构造方法的声明
1)构造方法的名称必须与类名称一致
2)构造方法的声明处不能有任何返回值类型的声明
3)不能在构造方法中使用return返回一个值。

三)结论:一个类的构造方法不能被子类override
1)由继承定义可知子类与父类名称显然不同
2)有构造方法的的声明第一条可知子类的构造方法与父类的构造方法名称不同
3)由方法的重写定义第二条可知子类的构造方法不能重写父类的构造方法
回复 使用道具 举报
谢谢,其实也可以用反证法,假设能,那么当外部调用构造方法时,不知道是创建父类的对象还是子类对象,因为覆盖,方法必须一致。new Method();就不知道建立的是父类还是子类的对象
回复 使用道具 举报
子类继承的只是成员变量和成员方法,构造方法不能被子类继承
所以子类中要使用父类的构造方法都必须通过父类去调用
所以在子类中谈不上覆盖父类的构造方法
回复 使用道具 举报
重写要求子类中的重写方法必须和父类中的方法具有相同的”方法签名“,即相同的方法名,相同的参数列表,相同的返回值类型。从这方面看,我们不能定义一个跟父类同名的子类,自然无法重写构造方法。
回复 使用道具 举报
不能。子类是由父类的构造方法创建的。若覆盖了父类的构造方法,那何来子类?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马