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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© es2379649 中级黑马   /  2014-8-5 19:24  /  1810 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 es2379649 于 2014-8-6 10:59 编辑

两个什么区别呢?

11 个回复

倒序浏览
本帖最后由 怀念黑海岸 于 2014-8-6 11:58 编辑

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

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
重载是面向对象中的,自己再看下面向对象,重写的是覆盖父类的方法
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-5 19:50
一个函数内允许拥有多个同名函数,但是你如何保证调用它们时能区分开来呢,有几个办法,不同的同名函数
    ...

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

重载是多态的一种,那么重载也是运行时绑定的?请教这个说法的出处是?
回复 使用道具 举报
重写(覆盖)是子类对父类的扩展和继承,而重载是定义相同,而参数列表不同的方法。
回复 使用道具 举报
本帖最后由 怀念黑海岸 于 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
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-6 11:32
多态包括有静态多态和动态多态,一般静态多态是在编译期,由Java编译器根据参数列表的不同,来决定绑定相 ...

哦,原来如此,我还以为我一直以来都误解了重载。这个说法倒是很少见,因为重载不必与OO结合,所以一般说OO三大特性的多态都是指后绑定
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马