黑马程序员技术交流社区

标题: 重写和重载的区别是什么,内部原理是什么 [打印本页]

作者: 西地那非    时间: 2014-7-9 22:25
标题: 重写和重载的区别是什么,内部原理是什么
重写和重载的区别是什么,内部实现原理是什么

作者: mirror    时间: 2014-7-9 22:46
本帖最后由 mirror 于 2014-7-9 22:47 编辑

重写必须是在继承里 ,方法名、参数个数和参数类型 都必须相同; 重载,在一个类定义中,可以编写几个同名的方法

作者: 215041631    时间: 2014-7-9 22:55
重载是在一个类中有不同参数的同名方法名字,重写是需要继承或者实现一个父类或借口,然后子类具有与父类相同方法名的方法。重载时会编译器会在方法区中找所属类名的方法,会找与之参数类型匹配的方法并调用。而重写在实际的方法调用时,java会先在当前类的对象中寻找名称相同的方法,如果没有,就到super引用的父类对象中去寻找该方法,所以,若在子类中存在和父类方法的签名和返回值类型完全相同的方法(重写)的话,java就会直接调用该对象的方法而不用去父类去寻找调用方法了。
作者: 渴望学习    时间: 2014-7-9 23:01
重写的前提是在继承关系中,返回类型、方法名、参数列表必须相同,不能缩小被重写方法的访问权限。重载的前提是在同一个类中,方法名相同,参数列表不相同,与返回类型无关。
作者: blue_sky    时间: 2014-7-9 23:37
重写和重载是两个完全不同的概念;

  重载:
      在Java中,方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
      调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
      注意事项:
            1、重载的方法名称一定要相同;
            2、返回值类型可以相同也可以不同;
            3、参数的个数和类型不能相同;
  重写(覆盖):
      在Java中,由于拥有多态性,子类可继承父类中的方法,不需要重新编写相同的方法。但是有时子类并不想       直接继承父类的方法,而是对指定方法拥有自己的处理方式。这时就需要重写父类的某一方法,这就叫做
方法重写;
      注意事项:
           1、重写的方法必须要和父类的方法具有相同的方法名、返回类型和参数表;
           2、可以使用super关键字,引用父类;
           3、子类函数的访问修饰权限不能少于父类的;
作者: cheye0207    时间: 2014-7-9 23:57
重写是复写父类方法,重载是不同参数的构造方法
作者: 遗失的美好YXJ    时间: 2014-7-10 00:45
首先别被名字误导了,重写和重载的关系其实是雷锋和雷峰塔的关系(一点关系没有).

重写是发生在2个类之间继承关系里的,子类不爽父类的方法,把相同声明(类名,参数列表,返回值)的方法中主体部分重新改了下.


重载是发生在同一个类里面,就函数名相同,参数列表不同,返回值类型随意.
重载的应用场景举个栗子:画长方形的方法有好几种,可以使已知3个点;一个点两条线;两个对顶点.最原始的想法是定义3个方法名,画长方形1,画长方形2,画长方形3.这样会很崩溃.如果3个方法都叫画长方形就好了,但是又会产生你到底调用的是哪个画长方形方法的问题,于是java中设计了方法重载,通过你传入的参数来识别你到底调用的是哪个方法.


作者: 杨冬冬    时间: 2014-7-10 00:57
重写是继承关系中,子类的方法覆盖父类的方法,他们的方法声明相同,只是方法实体不一样

重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数,
作者: 青程    时间: 2014-7-10 09:53
这个区别好说,关键在于面试时他不这样问,他会问overload和override的区别是什么
作者: Adjin    时间: 2014-7-10 11:03
遗失的美好YXJ 发表于 2014-7-10 00:45
首先别被名字误导了,重写和重载的关系其实是雷锋和雷峰塔的关系(一点关系没有).

重写是发生在2个类之间继 ...

比喻的好啊
作者: 晴儿    时间: 2014-7-10 12:59
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。
作者: 晴儿    时间: 2014-7-10 13:00
父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。

但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

方法重写又称方法覆盖。


作者: 非5莫属    时间: 2014-7-10 13:48
路过   学习了   
作者: ╰_〃无法释怀的    时间: 2014-7-10 14:25
顶一下!
作者: PowerLion    时间: 2014-7-10 14:29
他们虽然都有个重字,但完全是两个东西好吧。重写是为了子类对继承自父类的方法,重新编写,就是好比我觉的我爹的技能过时了,跟不上时代了,我重新学习这门技能的新思维新技术,但技能名字还是一样。。重载是同一个类中,同名但参数不同的方法。主要是用在比如我有一个技能画画,我即可以传个参数毛笔进去画山水画,又可以传个排笔进去画油墨画。重载的好处是,在调用方法时,可以直观的知道这一种技能,有哪些不同的实用方法。你想想要是都用不同的方法名来写,是不是会显的类不好记忆和理解
作者: SLJ_920808    时间: 2014-7-10 14:30
blue_sky 发表于 2014-7-9 23:37
重写和重载是两个完全不同的概念;

  重载:

学习一下。。。。。
作者: mytongyong    时间: 2014-7-10 15:16
重载和重写根本就谈补上任何联系和区别,根本就是两个完全不同的概念好吧




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