首页 > 试题广场 >

覆盖(重写)与重载的关系是()。

[单选题]

覆盖(重写)与重载的关系是()。

  • 覆盖(重写)只有出现在父类与子类之间,而重载可以出现在同一个类中
  • 覆盖(重写)方法可以有不同的方法名,而重载方法必须是相同的方法名
  • final修饰的方法可以被覆盖(重写),但不能被重载
  • 覆盖(重写)与重载是同一回事
重载 是对一个方法的多种实现方式比如 save() save(int a) 这个就是重载,调用按传入参数选择重载的方式 复写 是子类对父类的复写 有两同两小一大 同名同参 权限更大 返回值和抛出异常要为父类的子类
编辑于 2021-07-18 12:24:14 回复(0)
面试很喜欢问的:
     首先,重载和重写都是多态的一种体现方式。重载是编译期间的活动,重写是运行期间的活动。
     其次,重载是在一个类中定义相同的名字的方法,方法的参数列表或者类型要互相不同,但是返回值类型不作为是否重载的标准,可以修改可见性;
     重写是不同的,要求子类重写基类的方法时要与父类方法具有相同的参数类型和返回值,可见性需要大于等于基类的方法
    
编辑于 2017-05-12 10:10:06 回复(2)
多态性 
通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性 

重载 : 相同名称成员的参数列表是不相同的(参数顺序和类型)。 重载的方法可看成一个全新的方法,与原方法相比它可以有不同的"可见度"和“返回值类型”。

重写 (重写 = 覆盖) 出现在父类与子类之间
派生的类型继承其基本类型的所有成员;也就是说,这些成员是在派生类型之上定义的,并可用于派生类型。继承成员的行为和质量可以通过以下两种方式来修改: 

1、派生类型可通过使用相同的签名定义一个新成员,从而隐藏继承的成员。将先前的公共成员变成私有成员,或者为标记为 final 的继承方法定义新行为时,可以采取这种方法。 

2、派生类型可以重写继承的虚方法。重写方法提供了对方法的一种新定义,将根据运行时的值的类型,而不是编译时已知的变量类型来调用方法。只有当虚方法没有标记为 final 且新方法至少可以像虚方法一样进行访问的情况下,成员才能重写虚方法。 
方法名,参数相同形成重写,重写的方法不能降低原方法的"可见度",也不能改变原方法的返回值类型。 

如下例: 

class A { 
protected int method1(int a, int b) { return 0; } 

public class B extends A{ 
public int method1(int a, int b) { return 0; } //正确,重写父类方法,可以扩大访问权限 
//private int method1(int a, int b) { return 0; } //错误,重写父类方法,不能降低了访问权限 
//private long method1(int a, int b) { return 0; } //错误,重写父类方法,不能改变返回值类型 
public short method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型 
private int method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型 


但这里 方法public short method1(int a, long b) { return 0; }和 方法private int method1(int a, long b) { return 0; }不能同时存在,因为在同一类中,不允许存在相同名字和参数类型的方法(重写的方法)。
发表于 2017-05-08 15:30:39 回复(0)
选A

发表于 2018-07-16 21:31:21 回复(0)
A的表述不准确,接口和实现类中也有重写。
发表于 2018-05-10 21:25:23 回复(0)
final修饰的方法可以被重载,但不可以被重写
发表于 2017-07-28 20:55:30 回复(0)

方法的重写(override)两同两小一大原则:

方法名相同,参数类型(参数列表)相同

子类返回类型小于等于父类方法返回类型,

子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限。

发表于 2020-04-22 09:19:49 回复(0)
不同点 重载 重写
参数列表 必须不同 必须相同
返回类型 可不同 必须相同
访问修饰符 可不同 不能比父类更严格
发生范围 同一类中 子类
异常范围 可修改 可以减少或删除,不能抛新异常或范围更广的异常
发生阶段 编译期 运行期
发表于 2020-07-31 23:41:57 回复(1)
final 修饰的方法可以被重载的,但是如果重写的话是不允许的,只要不是被修改,就符合java编程中final的规范。
发表于 2022-03-16 22:23:39 回复(0)
具体说来,重载与重写的区别:

一、重写(override

override是重写(覆盖)一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。

重写(覆盖)的规则:

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

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

3、重写的方法的返回值必须和被重写的方法的返回一致;

4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;

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

6、静态方法不能被重写为非静态的方法(会编译出错)。

二、重载(overload)
overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。

重载的规则:

1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);

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

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

多态的概念比较复杂,有多种意义的多态,一个有趣但不严谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。 一般,我们使用多态是为了避免在父类里大量重载引起代码臃肿且难于维护。

发表于 2017-11-13 16:13:50 回复(1)
重写(覆盖)override 是父与子的关系,垂直关系重载overload是发生在一个类中,水平关系。同类同名不同参数(个数、类型、顺序的不同)
发表于 2021-07-09 16:50:34 回复(0)
重写override是子类对父类的方法的重新编写,返回值和形参都不能改变。即外壳不变,核心重写!访问权限要大于等于父类,比如父类声明方法为public,子类不能生明为protected。重载overload是方法名字相同参数不同,参数不同指个数或类型。修饰符可以改变。返回类型可以改变,但不能以返回值类型作为重载的区分标准。
发表于 2021-03-09 21:04:00 回复(0)
面试很喜欢问的:      首先,重载和重写都是多态的一种体现方式。重载是编译期间的活动,重写是运行期间的活动。      其次,重载是在一个类中定义相同的名字的方法,方法的参数列表或者类型要互相不同,但是返回值类型不作为是否重载的标准,可以修改可见性;      重写是不同的,要求子类重写基类的方法时要与父类方法具有相同的参数类型和返回值,可见性需要大于等于基类的方法     
发表于 2018-10-20 19:49:32 回复(0)
可能,有些人能够看懂 override 和 overload ,但是就是不懂***的怎么翻译成中文,因为一堆乱七八糟的名字。
这里 有个小诀窍, 
overload 是单纯自己一个类在瞎搞,load是下载的意思。那这个就是 重载的意思了。
首先 override 是子类与父类之间的关系,这个你经常写 注解@Override就清楚了,再无法记住,你就看那个 ride 是骑的意思,理解成儿子骑在老子头上。 那这个就是 重写 或者 覆盖。
随便理解一下。

发表于 2017-10-27 19:36:57 回复(0)

方法的重载:
方法重载的定义:同一个类或与他的派生类中,方法名相同,而参数列表不同的方法。其中参数列表不同指的是参数的类型,数量,类型的顺序这三种至少有一种不同。
方法重载与下列无关:
与返回值类型无关;与访问修饰符无关
构造方法也可以重载

方法的重写:
方法的重写的定义:在继承关系的子类中,定义一个与父类相同的方法
判断是否重写的方式:在方法之前加上@ Overri de
方法重写的特点:
在继承关系的子类中重写父类的方法
重写的方法必须方法名相同,参数列表也相同
重写的方法的返回值类型应该与父类中被重写方法的返回值类型相同或是他的子类类型
重写的方法的访问权限应该与父类中被重写方法的访问权限相同或高于它的访问权限
重写的方法不能抛出比父类更加宽泛的异常
方法重写的注意事项:
构造方法不能被重写,不要问为什么?因为构造方法名必须和类名相同
private修饰的成员方法不能被重写
static修饰的方法不能被重写
final修饰的方法不能被重写
当子类重写了父类中的方法后,子类对象调用该方法时调用的是子类重写后的方法
发表于 2017-10-01 02:05:05 回复(0)
实现接口不属于继承,a也有问题
发表于 2023-01-20 19:40:15 回复(0)

摘自菜鸟教程

重写(Override)

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值(可以是父类的派生类)和形参都不能改变。即外壳不变,核心重写!
  •         声明为final的方法不能被重写。
  •         声明为static的方法不能被重写,但是能够被再次声明。
  •         子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  •         子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。

重载(Overload)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表

最常用的地方就是构造器的重载。

重载规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。


发表于 2019-07-30 16:13:22 回复(0)
重载,是方法名相同,参数列表不同,调用根据不同的参数列表来判断调用那个。
重写(覆盖),是子类对继承自父类的方法的复写,方法名相同,参数列表相同,返回值和异常类型要为父类的子类
A、A对
B、重写的方法名必须和父类的相同,重载方法名必须相同。B错。
C、final修饰的方法可以重载,不能重写。C错。
D、D错
发表于 2023-04-07 19:29:13 回复(0)
想问一下,方法名不同,怎么能称为重载?
发表于 2022-08-08 08:12:12 回复(0)
重写需要返回值和参数都要一致,一般是子类继承父类重写。重载必须要在同一类中
发表于 2021-08-22 23:23:16 回复(0)