黑马程序员技术交流社区

标题: 看到有同学发的关于重写的帖子,我觉得有的地方貌似需要更正一下呀 [打印本页]

作者: 苑占丽    时间: 2012-7-15 11:58
标题: 看到有同学发的关于重写的帖子,我觉得有的地方貌似需要更正一下呀
对于方法重重写,视频里已经讲的很清楚了,但有一点忽略了,就是返回值类型可以不同//看完楼主写的这句话,我怎么觉得,楼主没有理解全面呢,方法重写,就是方法名相同,形参列表相同,但返回值类型也必须相同的吖,如果一个返回void,一个返回String,那就没有对方法进行重写吖。


下面是我对重写和覆盖的总结:
重载重写都需要方法名相同; 重载要求参数列表不同; 重写要求参数列表、返回值都相同所以你说的重写的“两同两小一大”规则应该为”三同一小一大”规则即,方法名。形参列表。返回值都必须相同,而,重载对返回值类型是没什么特殊要求的,只求方法名相同,形参列表不同而已。
希望楼主好好查查资料,谨慎发帖呀,以免让对这个问题本就模棱两可的同学更迷糊吖。。。。
作者: 张_涛    时间: 2012-7-15 12:03
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
   1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
   2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
   3、重写的方法的返回值必须和被重写的方法的返回一致;
   4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
   5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

   6、静态方法不能被重写为非静态的方法(会编译出错)。



overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
   1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
   2、不能通过访问权限、返回类型、抛出的异常进行重载;
   3、方法的异常类型和数目不会对重载造成影响;
参考:http://blog.csdn.net/ericbaner/article/details/3857268
作者: 苑占丽    时间: 2012-7-15 12:06
张_涛 发表于 2012-7-15 12:03
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类 ...

同学理解的很透彻嘛,我是看到那个重写的帖子,第一话就把我雷住了,竟然说方法重写返回值类型可以不同。真吓人:L
作者: 张_涛    时间: 2012-7-15 12:07
苑占丽 发表于 2012-7-15 12:06
同学理解的很透彻嘛,我是看到那个重写的帖子,第一话就把我雷住了,竟然说方法重写返回值类型可以不同。 ...

俺百度的,不是俺自己讲的。
呵呵
作者: 苑占丽    时间: 2012-7-15 12:09
张_涛 发表于 2012-7-15 12:07
俺百度的,不是俺自己讲的。
呵呵

理解了就好,贵在理解。。




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