首页 > 试题广场 >

Java中的方法覆盖(Overriding)和方法重载(Ov

[问答题]
Java中的方法覆盖(Overriding)和方法重载(Overload)是什么意思?

方法重写的原则:

  1. 重写方法的方法名称、参数列表必须与原方法的相同,返回类型可以相同也可以是原类型的子类型(从Java SE5开始支持)。
  2. 重写方法不能比原方法访问性差(即访问权限不允许缩小)。
  3. 重写方法不能比原方法抛出更多的异常。
  4. 被重写的方法不能是final类型,因为final修饰的方法是无法重写的。
  5. 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
  6. 被重写的方法不能为static。如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足重写条件,那么会发生编译错误;反之亦然。即使父类和子类中的方法都是静态的,并且满足重写条件,但是仍然不会发生重写,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
  7. 重写是发生在运行时的,因为编译期编译器不知道并且没办法确定该去调用哪个方法,JVM会在代码运行的时候作出决定。

方法重载的原则:

  1. 方法名称必须相同。
  2. 参数列表必须不同(个数不同、或类型不同、参数类型排列顺序不同等)。
  3. 方法的返回类型可以相同也可以不相同。
  4. 仅仅返回类型不同不足以成为方法的重载。
  5. 重载是发生在编译时的,因为编译器可以根据参数的类型来选择使用哪个方法。

重写和重载的不同:

  1. 方法重写要求参数列表必须一致,而方法重载要求参数列表必须不一致。
  2. 方法重写要求返回类型必须一致(或为其子类型),方法重载对此没有要求。
  3. 方法重写只能用于子类重写父类的方法,方法重载用于同一个类中的所有方法。
  4. 方法重写对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。
  5. 父类的一个方法只能被子类重写一次,而一个方法可以在所有的类中可以被重载多次。
  6. 重载是编译时多态,重写是运行时多态。
发表于 2017-01-07 18:36:13 回复(20)
overload 多个加载 所以在一个类中进行加载,方法名相同,参数个数或类型不同,与返回值无关。
 override 覆盖、优先执行,指的是子类重写父类的方法,方法名、返回类型和参数必须相同。 除了访问权限>=父类,抛出异常必须<=父类(或者不抛异常)。(特殊点,如果子类重写的方法所抛异常小于父类,那么就不能调用父类的方法,因为子类的异常小,捕获不了 ), private修饰的父类方法不能被重写
编辑于 2016-08-22 09:07:14 回复(5)
  • 重载:同一个类、不同方法、方法名相同、返回值类型或者参数不同
  • 重写:子类和父类、方法名相同、返回值类型和参数相同
发表于 2015-12-02 16:27:38 回复(5)
方法重载是两同一不同,在同一个类里,两个或者多个方法具有相同的方法名,参数列表不同。
方法重写是指继承的时候子类重写父类的方法,此时方法名相同,参数列表相同,返回类型也要相同或者是其子类。同时对于访问权限和异常抛出都有严格的限制。
方法重载是编译时期的多态,而方法重写是运行时期的多态。
发表于 2018-03-10 19:25:52 回复(0)
最讨厌别人翻译override和overload了 翻译之后傻傻分不清楚 其实不翻译不是很好懂得吗
编辑于 2015-12-09 19:25:54 回复(2)
Override 发生在子类和父类之间,具体实现是子类对父类中一个可访问(Private修饰的方法不可被继承)方法的重写,保证其方法名、参数个数,参数类型不变。
Overlord 发生在一个类中,具体表现为多个方法具有相同的方法名,但其参数个数或参数类型各不相同。记住与返回值类型无关。
发表于 2016-09-09 17:04:46 回复(0)
重写是父类与子类之间多态性的一种表现,重载是同一个类中多态性的一种表现。 override(重写)是覆盖了一个方法并且对其重写,以求达到不同的作用。 overload(重载)它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时, JVM就会根据不同的参数样式,来选择合适的方法执行。 Overload(重载)的方法是可以改变返回值的类型的。
发表于 2019-04-02 14:50:08 回复(1)
重写的两同两小一大原则:方法签名和参数列表相同,方法返回值类型和抛出异常相同或变小,方法方法访问权限相同或变大
发表于 2019-05-08 11:42:09 回复(0)
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
发表于 2015-10-29 12:10:41 回复(4)
方法的重写的原则
1. 返回值类型, 参数列表, 方法名必须相同
2. 父类的方法不能是 final 修饰的, final 表示最终的, 所以不可以被重写
3. 父类的方法不能是 static 修饰的, 父类的方法 被static修饰, 子类不是static修饰,其他的都相同, 编译器会报错, 如果都被 static修饰, 那么也不会实现重写, 因为 重写是在 运行时动态绑定的
4. 重写的方法不能被 private 修饰, 如果被 private 修饰过了, 只是给当前类定义了一个新的方法
5. 重写的方法抛出的异常不能多于父类的方法(即如果父类没有抛出异常,子类也不能抛出,RuntimeException以及其子类不受影响),且 抛出的异常继承关系不能大于父类抛出的异常,也不能是父类异常的同级其他的异常类, 只能是和父级异常抛出的相同,或者是其子级
6. 重写的方法应该比被重写的方法执行效率高
7. 重写是发生在代码运行时的, 因为 编译器不确定且不知到要去选择使用哪一个方法, 所以要在代码运行的时候进行选择

方法的重载的原则
1. 方法名必须相同
2. 参数列表必须相同
3. 返回值类型可以相同也可以不同
4. 仅仅返回值类型不同,不足以作为重载
5. 重载是发生在编译时的,因为 编译器可以根据参数列表来选择使用哪一个方法

重写和重载的区别
1. 重写的参数列表必须相同, 重载的参数列表必须不同
2. 重写的返回值类型必须相同, 重载的返回值类型可以不同
3. 重写是发生在代码运行时, 重载是发生在编译时
4. 重写对于方法的访问权限和异常的抛出都有特定的限制, 而重载没有这方面的限制
5. 重写的方法只能有一个,重载的方法可以有多个
7. 重写用于子类重写父类的方法, 重载用于在本类中使用
编辑于 2019-01-13 18:15:15 回复(1)
重写的定义:子类需要修改从父类中继承的方法的实现。

重写的原则:

  1. 重写方法的方法名称、参数列表必须与原方法的相同,返回类型可以相同也可以是原类型的子类型(从Java SE5开始支持)。
  2. 重写方法不能比原方法的访问权限小。
  3. 重写方法不能比原方法抛出更多的异常。
  4. 被重写的方法不能是final类型(因为final修饰的方法是无法重写的),private类型(在其子类中只是新定义了一个方法,并没有对其进行重写),static类型(方法重写是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。)。
重载的定义:让类以统一的方式处理不同类型数据。

方法重载的原则:

  1. 方法名称必须相同。
  2. 参数列表必须不同(个数不同、或类型不同、参数类型排列顺序不同等)。
  3. 方法的返回类型可以相同也可以不相同。(仅仅返回类型不同不足以成为方法的重载。)

重写和重载的区别:

  1. 方法重写要求参数列表必须一致,而方法重载要求参数列表必须不一致。
  2. 方法重写要求返回类型必须一致(或为其子类型),方法重载对此没有要求。
  3. 方法重写对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。
  4. 方法重写只能用于子类重写父类的方法,而方法重载不光可以用于子类重载父类的方法,还可以发生在同一类中。
  5. 父类的一个方法只能被子类重写一次,而一个方法可以在所有的类中可以被重载多次。

发表于 2018-05-15 22:50:36 回复(0)
重载:方法名一致、形参列表不一致、切记 与返回值类型无关(除了名字,其他可以不一样)
重写:方法名与形参列表一致,子类返回值类型要小于等于父类返回值类型,子类抛出的异常要小于或等于父类抛出异常。重写要求存在继承或实现关系。(全都一样,注意返回值类型要被父类蹂躏)
发表于 2017-03-26 11:50:12 回复(0)
重载(Overload)时,输入参数【前置条件】可以被放大【相同或者更加宽松】
覆写(Override)时,输出结果【后置条件】可以被缩小【范围值相同或更小】
编辑于 2017-01-07 10:18:53 回复(0)
重载:方法名一致、形参列表不一致、与返回值类型无关
重写:方法名与形参列表一致,子类返回值类型要小于等于父类返回值类型,子类抛出的异常要小于或等于父类抛出异常。重写要求存在继承或实现关系。
发表于 2016-08-05 14:56:51 回复(0)
覆盖:同名不同参,返回无要求,重写:同名参返回类型,访问权限不能差,异常不能多,父类private,static不行
编辑于 2021-12-15 00:47:31 回复(0)
重写(覆盖):子父类之间,子类覆盖父类中同名同参同返回值的方法 重载:同一类中,同名不同参的方法构成重载
发表于 2021-10-14 12:23:55 回复(0)
方法重载:本类的方法名相同,参数不同的方法。 方法覆盖:子类继承父类,把方法进行重写的方法
发表于 2021-07-30 18:43:18 回复(0)
方法覆盖:指的是在继承父类的时候定义一个和父类某个继承过来的方法的方法签名以及返回值完全一致的方法。覆盖方法不能有更小的访问权限,不能抛出更大的异常。 方法重写:指的是在同一个类中,通过方法签名的不同来定义重名但是功能不同的一些方法,注意:方法签名指的是方法名和参数列表,返回值的不同不能区分重写的方法。
发表于 2021-05-25 00:02:16 回复(0)
方法覆盖(override):发生在继承类中,子类重写父类方法,要求方法名相同并且相同行参 方法重载(overload):发生在同一个类中,方法名相同但形参不同
发表于 2021-03-12 15:35:16 回复(0)
重载发生在一个类中,重写发生在两个类存在继承关系中
发表于 2021-02-28 21:07:01 回复(0)