Java 重载和重写的区别

重载(Overloading)和重写(Overriding,有时也称为覆盖)是面向对象编程中的两个重要概念,它们都体现了多态性,但应用于不同的场景且遵循不同的规则。下面是它们之间的一些主要区别:

1. 定义上的区别:

1)重载(Overloading)指的是在同一个类中,存在多个同名的方法,但这些方法的参数列表不同(参数类型、个数或顺序不同)。方法的返回类型不影响重载。重载是编译时多态性的体现,由编译器决定调用哪个方法。

2)重写(Overriding)发生在继承关系中,子类重新实现了父类中的某个方法,方法名、参数列表必须与父类中的完全一致,但方法体(实现)可以不同。重写是运行时多态性的体现,具体调用哪个方法由运行时对象的实际类型决定。

2. 规则上的区别:

1)重载方法的访问修饰符可以不同,返回类型可以不同,但参数列表必须不同。

2)重写方法的访问修饰符的限制不能比父类中的更严格,返回类型必须与父类方法兼容(相同或者是父类返回类型的子类型),并且抛出的异常类型也不能比父类方法声明的更广泛。

3. 类的关系上的区别:

1)重载是同一类内部的方法之间的关系。

2)重写是子类与父类之间的方法关系。

4. 发生时机的区别:

1)重载是在编译时期由编译器根据传入参数的类型和数量来决定调用哪个方法。

2)重写则是在运行时期根据对象的实际类型动态绑定来决定调用哪个方法。

5. 多态性体现:

1)重载体现了编译时多态,即静态多态性。

2)重写体现了运行时多态,即动态多态性。

总结来说,重载关注的是同一个类中方法名称相同但参数不同的情况,而重写则强调的是子类对父类方法的具体实现进行替换。这两种机制都增加了代码的灵活性和可维护性,但应用场合和实现原理各不相同。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值