java重载和重写

本文深入探讨了重载(overload)与重写(override)的概念,解释了两者在编程中的应用区别。重载允许在同一个类中定义多个同名但参数不同的方法,而重写则是在子类中实现与父类相同签名的方法,以实现多态性。文章通过实例说明了编译期绑定与运行期绑定的原理,并强调了方法签名、返回类型及访问权限在重写中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重载(overload)和重写(方法覆盖,override,发生在子类中)
重载是值在【一个类中】定义定义多个方法名相同但参数列表不同的方法,在编译时,根据参数的个数和类型来决定绑定那个方法
重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型判断应该调用哪个方法;
因为:变量obj的类型为super,因此:Goo的g(Super)方法被调用

重写是指在子类中定义和父类完全相同的方法,在程序运行时,根据对象的类型不同(而不是引用类型)而调用不同的版本
重写遵循所谓“运行期绑定”,即在运行的时候根据引用变量指向的实际对象类型调用方法;因为:obj实际指向的是子类的的对象,因此:子类重写后的f方法被调用

注意点:
1.【方法重写返回值类型如果是基本类型应与父类的一致】:
子类重写父类的方法如果返回值类型是基本类型的话,要求相同

2.重载,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

3.方法重写、重载的问题。 重写要求方法签名完全相同,【返回值类型如果是基本类型或无返回值时必须一致】。【重载要求方法名相同且参数列表必须不同,与返回值类型无关】。

4.子类重写父类的方法,【访问权限不能降低】;

5.子类中继承了父类的属性和方法,所以子类中可以直接进行重载父类中的方法

(单选题)在下面程序的第 7 行补充上下列哪个方法,会导致在编译过程中发生
错误( )

1)  class Super{
2)    public float getNum(){
3)      return 3.0f;
4)    }
5)  }
6)  public class Sub extends Super{
7)    // TODO ...
8)  }

A.public float getNum(){retun 4.0f;}
B.public void getNum(){}
C.public void getNum(double d){}
D.public double getNum(float d){retun 4.0f;}
【正确答案】B
【答案解析】方法重写、重载的问题。 重写要求方法签名完全相同,返回值类型如果是基本类型或无返回值时必须一致。重载要求方法名相同且参数列表必须不同,与返回值类型无关。

(多选题)下面选项中哪两个可以在 A 的子类中使用( )

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

A.public int method1(int a, int b) { return 0; }
B.private int method1(int a, int b) { return 0; }
C.private int method1(int a, long b) { return 0; }
D.public short method1(int a, int b) { return 0; }

【正确答案】A,C
【答案解析】B子类重写父类的方法,访问权限不能降低;C属于重载;D子类重写父类的方法如果返回值类型是基本类型的话,要求相同。

方法重写后向上造型后的父类引用,父类引用的调用子类重写后的方法时实际运行的是子类重写后的方法。
//编译时按分类类型编译
//运行时按子类对象运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Octopus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值