精华内容
下载资源
问答
  • http://space.itpub.net/12639172/viewspace-664323 ...
    http://space.itpub.net/12639172/viewspace-664323

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-703580/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/9240380/viewspace-703580/

    展开全文
  • 父子之间是重写(Overriding),同一个类中是重载...2、返回类型必须一直重写的方法返回类型相同,否则不能称其为重写而是重载。 3、访问修饰符限制一定要大于被重写方法访问修饰符(public>pro...

    父子之间是重写(Overriding),同一个类中是重载(Overloading)

    重载是多态的一种表现,继承中可能存在重写(或者叫覆盖)

    重写方法的规则

    1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。

    2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

    3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

    4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:

    父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

     

    而重载的规则:

    1、必须具有不同的参数列表;

    2、可以有不同的返回类型,只要参数列表不同就可以了;

    3、可以有不同的访问修饰符;

    4、可以抛出不同的异常;

     

    重写与重载的区别在于:

    重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。

     

    final修饰的类不能被继承,final修饰的方法不能被重写,但是能被重载

    展开全文
  • 如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了, 下面说说它们的区别吧。 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数...

    这三个概念都是与Java中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了, 下面说说它们的区别吧。        重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。

           覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。

           隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了。隐藏与另外两个概念表面上看来很像,很难区分,其实他们的关键区别就是在 多态的实现上。

       什么叫多态?简单地说就是一个接口,多种实现吧。 覆盖指的是派生类的虚拟函数覆盖了基类的同名且参数相同的函数!

     

       重载(overload):   必须在一个域中,函数名称相同但是函数参数不同,重载的作用就是同一个函数有不同的行为,因此不是在一个域中的函数是无法构成重载的,这个 是重载的重要特征   必须在一个域中,而继承明显是在两个类中 相同的函数名的函数,在基类和派生类中的关系只能是覆盖或者隐藏。 隐藏(hide): 指的是派生类的成员函数隐藏了基类函数的成员函数.隐藏一词可以这么理解:在调用一个类的成员函数的时候,编译器会沿着类的继承链逐级的向上 查找函数的定义,如果找到了那么就停止查找了,所以如果一个派生类和一个基类都有同一个同名(暂且不论参数是否相同)的函数,而编译器 最终选择了在派生类中的函数,那么我们就说这个派生类的成员函数"隐藏"了基类的成员函数,也就是说它阻止了编译器继续向上查找函数的定义.

     override(重写)

       1、方法名、参数、返回值相同。

       2、子类方法不能缩小父类方法的访问权限。

       3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

       4、存在于父类和子类之间。

       5、方法被定义为final不能被重写。

     overload(重载)

      1、参数类型、个数、顺序至少有一个不相同。 

      2、不能重载只有返回值不同的方法名。

      3、存在于父类和子类、同类中。

       方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。 重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 。

       子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了. 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同 的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常 进行重载.

    1. Override 特点

      1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

      2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

      3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

      4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

    2.Overload 特点

      1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float), 但是不能为fun(int, int));

      2、不能通过访问权限、返回类型、抛出的异常进行重载;

      3、方法的异常类型和数目不会对重载造成影响;

      4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

     

    1、Overload没有关系,Override有点关系(范围小的可以被范围大的Override)。  2、Overload返回值类型不同不能作为不同的两个函数,Override应该完全一样的返回类型。  --------------------------------------------------------------- 

    overload:  public   a(){}  public   a(int   a){]  在一个类中有同名的方法,但是方法带有不同的参数 

    Override:  public   class   a{      public   aaa(){]  }  public   class   b   extends   a   {      public   aaa(){}  }  方法aaa Override  还有,overload一般发生在同一个类中的有着不同的参数名和(或)不同数量的参数的同名方法之间,但同名方法的返回值可以一样  override比较常见的是子类继承父类后,override父类中的一些方法以满足自己的需要。  我好像记得override的方法前的访问控制不能比父类中的方法中的控制权限低,就是说protected的父类方法不能被override成private或default的,你可以去看看书,书上应该有介绍。 

    --------------------------------------------------------------- 

    >>overload(通常被翻译为过载或重载) 

    一般语境里overload是对method(方法)而言的,可以指一个类中多个名字相同而参数类型列表不相同的方法,这个名字代表的方法就是被overload了的。编译器会根据参数类型列表的不同来决定调用叫这个名字的很多方法中具体的哪一个。 

    >>override(通常被翻译为覆盖) 

    一般语境里,如果说这个method(方法)是被override来的,就是说在定义这个方法的类的父类中有一个与这个方法同名且参数类型列表相同的方法,在子类中,这个方法被override了。在对这个子类的实例调用该方法时,编译器确切的知道调用的是这个子类的方法。 

    考虑这样两个类: 

    class   Father  {
             public   void   doSomething(){}
             public   void   doSomething(int   a){}
             public   void   doSomething(String   s,   int   a){}
    } 
    
    class   Son   extends   Father   {
              public   void   doSomething(String   s,   int   a)   {}
              public   void   doSomething(int   a,   String   s){}  
    } 

     

    Father类中有3个doSomething方法,唯一的区别是参数类型列表,它们是overload了的方法。再看子类,第一个方法也叫doSomething,且父类中有一个doSomething方法和这个方法的参数类型列表相同,所以这是override;而第二个方法虽然名字也叫doSomething,但它的参数类型列表跟父类中和子类中其他的doSomething方法的参数类型列表不一致,所以编译器默认这是一个overload的方法。那实际上我们有多少种方式来调用Son的实例呢?如下:  new   Son().dosomething();  new   Son().dosomething(3);  new   Son().dosomething("Hi",   5);  new   Son().dosomething(7,   "Hello"); 

    其中前三个是从父类继承的,且第三个是调用的子类的那个public   void   doSomething(String   s,   int   a){}方法,最后一个是在子类中新定义的一个overload的方法。 

    注意:overload是指同样的东西在不同的地方具有多种含义,而override是指它随时随地都只有一种含义。

    转载于:https://www.cnblogs.com/A0926/p/5172014.html

    展开全文
  • 重写与重载 在根本上没有任何关系和联系 只不过他们的名字太过于相似 容易让大家产生记忆错乱 以下几点是我总结的对重写和重载的区分以及理解 重载(overload):前提是在一个同一个类中,它需要满足两个条件 1....

    重写与重载 在根本上没有任何关系和联系    只不过他们的名字太过于相似   容易让大家产生记忆错乱    


    以下几点是我总结的对重写和重载的区分以及理解

     

    重载(overload):前提是在一个同一个类中,它需要满足两个条件 1.方法名相同  2.参数列表不同(参数个数不同,类型不同、排序发方式不同)   注:方法的重载与返回值类型无关,与访问修饰符无关。

     


    重写(override):重写前提是必须有继承关系,子类继承父类  子类重写父类方法。

    注:在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型

    访问修饰符问题 :子类重写方法的访问修饰符必须大于等于父类。 public > protected > deflaut > private

    展开全文
  • Java方法重载,就是在类中可以创建多个方法,它们具有相同名字,但具有不同参数和不同定义。 调用方法时通过传递给它们不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。 ...
  • 重写:针对多态性,利用同一接口实现不同实例。若是声明虚函数,在派生类会重定义基类同名函数。这样便无法实现用基类指针调用派生类函数目的。 注意:重载一定发生在同一作用域内;重定义发生在基类和派生类中...
  • 在c++学习中,有三个名词重载重写、重定义,对这三个知识点学习容易让人产生混乱概念,本篇博客主要从这三者的联系和对比出发,帮助加深对这三者理解。函数重载在c语言学习中,我们发现如果要实现一个add...
  • 重写(overriding): 表现在子类父类之间,子类对父类函数重新定义。需要子类定义父类同名且参数类型、顺序、个数完全一致。子类方法访问权限修饰符不能弱父类。 覆盖: 就是重写重载(Overloading): ...
  • 【面试题】重载与重写的区别 重载“两同一不同”:同一个类,同一个方法名,不同的参数列表。注:方法的重载方法的返回值无关! 构造器也是可以重载的 重写:(前提:在继承的基础之上,子类获取父类的结构以后...
  • 重载重写有什么区别联系

    千次阅读 2016-12-29 22:22:29
    重载涉及同一个类中同名方法,要求方法名相同,参数列表不同,返回值类型、访问修饰符无关。 重写涉及是子类和父类之间同名方法,要求方法名相同、参数列表相同、返回值类型相同(或是其子类),访问修饰符...
  • 重载和重写之间没有太大的联系重载的针对主题为同一个类中的方法,而重写针对的主题子类和父类之间。 方法在重载时严格按照两同一不同的规则进行,方法的权限、返回值没有太多的关系。 方法在重写是多发生在有...
  • 问: 什么是方法重写?什么是方法重载?成员变量可以被重写吗? 方法重载(Overloading):在一个类中,有两个及以上方法,它们方法名称相同,但参数列表...区别与联系: \ 重载(Overloading) 重写(Ove...
  • 【设计模式】面向对象小结——重写与重载

    千次阅读 热门讨论 2015-01-10 16:26:35
    如果没有封装、继承和多态,那么类类、对象对象、类对象之间,就没有了联系,就不能实现对代码重复利用,也就面向过程没有区别了。所以,它们是必要元素,是特点;接口、泛型和委托,是其基本和特点集中...
  • 1.重写的定义:子类通过重写可以隐藏自己继承方法,即如果子类可以继承父类某个方法,那么子类就有权利重写这个方法,重写时,方法返回值和形参都不能改变,就是外壳不能变, 里面核心代码重写,即重写的这...
  • override用于子类重写基类中方法,函数特征不变(即函数名,参数类型,参数个数)基类不是随随便便让子类去重写的,基类要在方法名前加个关键字virtual,否则子类不能重写基类重载函数名相同,但是参数类型或参数...
  • 初次见到这两个单词并没有什么特别感觉,... override 可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同作用。对我们来说最熟悉覆盖就是对接口方法实现,在接口中一般只是对方
  • 方法重写与多态

    2020-07-22 20:20:21
    一、方法重写 如果从父类继承的方法不能满足子类的要求,可以在子类中对父类的同名方法进行重写,以符合要求。...重载重写的区别联系重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,返回值类型
  • 【C#】重构、重载&重写

    热门讨论 2017-01-01 21:26:57
    重构与重载的区别是什么?重写和重构又是什么关系?它们分别怎么用?重构是重新构什么?重写又是在重写什么?重载载的又是什么?哈哈,撒了吧,我是把自己给问傻啦,原本觉得学的还是可以的,可是这么一问,全浆糊啦...
  • java面试碰到过的题目之方法重载和覆盖的区别。 1. 重载方法必须满足以下条件:  i. 方法名相同。 ii. 方法的参数类型、个数、顺序至少有一项不同。 iii. 方法的返回类型可以不相同。 iv. 方法的修饰符可以...
  • 一.方法重写 在继承的情况下,子类的方法满足以下条件,称为方法重写 1.方法名相同 2.参数列表相同 3.返回值类型相同或者是父类返回值的子类 4.访问修饰符的权限不能小于...方法重写与方法重载的区别联系 二.多态 ...
  • 重写(Overriding)是父类子类之间多态性一种表现,而重载(Overloading)是一个类中多态性一种表现。如果在子类中定义某方法其父类有相同名称和参数,我们说该方法被重写 (Overriding)。子类对象使用这个...
  • 本文covers: 1. 函数重载重写、重定义之间的区别是什么? 2. 协变返回类型函数重载具有怎么的联系? 3. C++引入协变返回类型的真正意义是什么?
  • 方法重载(Overloading)和方法重写(Overriding)都是...(2)方法重写是在子类存在方法父类方法名字相同,而且参数个数类型一样,返回 值也一样方法,就称为重写(Overriding) (3)方法重载是一个类多态性表现,...
  • 覆盖,重载,隐藏

    2012-07-24 11:03:04
    覆盖(重写),重载,隐藏这三者的概念很容易混淆,弄清楚这三者的区别与联系是有必要的. 覆盖(重写)->Override,重载->Overload,多态->Polymorphis 重载->Overload 函数名字相同 参数不相同(参数个数或参数...

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

重写与重载的区别与联系