黑马程序员技术交流社区

标题: 关于复写、覆盖、重写……求教 [打印本页]

作者: 于潇    时间: 2012-4-15 09:16
标题: 关于复写、覆盖、重写……求教
一直搞不明白它们三者之间是不是一回事儿,到底有什么区别,在线等答案……谢谢
作者: 黑马老兵    时间: 2012-4-15 09:28
重写:父类与子类之间。方法名相同,参数相同。
重载:同一类中,方法名相同,参数不同。
复写是重写的令一种叫法。
作者: 陈坚    时间: 2012-4-15 09:34
他们三个是一样的只是不同的叫法而已,其中重写的一些知识点如下:
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
   1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
   2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
   3、重写的方法的返回值必须和被重写的方法的返回一致;
   4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
   5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
   6、静态方法不能被重写为非静态的方法(会编译出错)
作者: wang耀雨    时间: 2012-4-15 10:18
复写重写覆盖都是一个概念,只不过叫法不同罢了,都是在java面向对象继承中的概念,发生覆盖是为了更新父类功能的内容,而不修改功能本身,
覆盖发生的必须条件和规则。。。呃楼上的很强悍,我就不多说了
我说一下重载和覆盖吧,重载是函数名相同,参数列表不同,重写是父类中和子类中存在函数名和参数列表完全相同的函数,
但是注意修饰符可以不同,但是一定要保证子类中的函数覆盖父类中函数的时候,子类函数的访问权限大于等于要覆盖的父类中的函数,
还要注意,私有化private比较特殊,当父类子类中两个函数都有该修饰符修饰,是不能够覆盖的,因为private修饰的函数或变量,只在当前类中有效,
作者: 刘占月    时间: 2012-4-15 10:22


重载:只看同名函数的参数列表。
重载不需要继承的。

你说的那三个应该都归纳与重写 override
重写:子父类方法要一模一样。必须有继承关系的
重写是实现多态的途径。 比如B继承了A   A里面有一个叫aa的虚方法,B重写了它   如果你声明了A a= new B()那么在你调a.aa()的时候其实是调用了B类里面的aa方法
作者: 张亮    时间: 2012-4-15 11:07
复写、覆盖、重写。这三个词是一个意思。都是重写父类的方法的意思。
作者: 于潇    时间: 2012-4-15 12:36
多谢各位好心人




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