黑马程序员技术交流社区

标题: 重写和重载 [打印本页]

作者: es2379649    时间: 2014-8-5 19:24
标题: 重写和重载
本帖最后由 es2379649 于 2014-8-6 10:59 编辑

两个什么区别呢?

作者: 怀念黑海岸    时间: 2014-8-5 19:50
本帖最后由 怀念黑海岸 于 2014-8-6 11:58 编辑

一个函数内允许拥有多个同名函数,但是你如何保证调用它们时能区分开来呢,有几个办法,不同的同名函数
       1:传入参数类型的不同,能够区分他们
       2:传入参数的个数不同,能够区分它们
       3:传入相同的参数个数,但是参数顺序不同,同样能够区分它们。
这就叫做重载。至于你这些同名函数是否有相同的返回值,他不会管。参数列表是判断两个函数名是否相同的标准。
我们在写程序时,经常会顺手就写出个我们这个类中并没有定义的方法,比如toString(),比如hashCode(),这些方法为什么我们能用呢,因为这些方法来自于整个java语言中最厉害的类--->Object类,所有类的亲爹。但是有时候我们在用object中的这些方法时,却感到并不顺手,因为没有达到我想要的结果,那么,你可以在你自己的方法内重新定义这个方法,这时,这个方法的名字,参数列表,返回值类型甚至有无抛出异常...都必须要和这个在你父类中定义的方法一致。然后在这个重新定义的类中你按照你自己的需求重新写了代码。这个就叫重写。当你继承了一个抽象类或者实现了一个接口时,你必须重写父类中的抽象方法或者重写接口中的所有方法。
       在java中,重载和重写其实都是多态的表现形式。
作者: 逍遥客    时间: 2014-8-5 19:58
重载是面向对象中的,自己再看下面向对象,重写的是覆盖父类的方法
作者: es2379649    时间: 2014-8-5 20:07
怀念黑海岸 发表于 2014-8-5 19:50
一个函数内允许拥有多个同名函数,但是你如何保证调用它们时能区分开来呢,有几个办法,不同的同名函数
    ...

十分感谢,太好了。
作者: 姜佳文    时间: 2014-8-5 21:09
重写就是子类重写父类方法,子类的方法和父类的方法声明完全一样,重载就是类中方法名相同,参数列表不同
作者: liujingnan    时间: 2014-8-5 23:25
重写是子类的方法覆盖父类的方法,要求方法名和参数都相同
重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同
作者: 刘小印    时间: 2014-8-5 23:28
一句话,重写是用于子父类中的,子类重写父类方法,要求方法声明完全一样,子类权限大于等于父类权限,方法重载是方法名相同,参数裂变不同,与返回值无关的方法都是。
作者: jerom023    时间: 2014-8-5 23:41
重载是是多态方面的,重写是继承父类的时候重写已有的方法
作者: fantacyleo    时间: 2014-8-5 23:45
怀念黑海岸 发表于 2014-8-5 19:50
一个函数内允许拥有多个同名函数,但是你如何保证调用它们时能区分开来呢,有几个办法,不同的同名函数
    ...

重载是多态的一种,那么重载也是运行时绑定的?请教这个说法的出处是?
作者: 罗超8849    时间: 2014-8-5 23:52
重写(覆盖)是子类对父类的扩展和继承,而重载是定义相同,而参数列表不同的方法。
作者: 怀念黑海岸    时间: 2014-8-6 11:32
本帖最后由 怀念黑海岸 于 2014-8-6 11:38 编辑
fantacyleo 发表于 2014-8-5 23:45
重载是多态的一种,那么重载也是运行时绑定的?请教这个说法的出处是? ...

多态包括有静态多态和动态多态,一般静态多态是在编译期,由Java编译器根据参数列表的不同,来决定绑定相应的重载方法。多态是在程序运行期间,由JVM根据引用的对象,来决定绑定相应的方法。这是一个连接,上面有讲什么运行时多态和编译时多态:
http://wenku.baidu.com/link?url=b6iGzco_T08Zi2tdD_aoTrY11M3qiyd3-q9A-fGVNsxd3zZtaNUiW7jJkVIIo75m_6odsPquhansq8nWl1A9Iz6-7n1HJQ8v6uDF6Y0xMnq

作者: fantacyleo    时间: 2014-8-6 11:47
怀念黑海岸 发表于 2014-8-6 11:32
多态包括有静态多态和动态多态,一般静态多态是在编译期,由Java编译器根据参数列表的不同,来决定绑定相 ...

哦,原来如此,我还以为我一直以来都误解了重载。这个说法倒是很少见,因为重载不必与OO结合,所以一般说OO三大特性的多态都是指后绑定




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