重载与重写(覆盖)的区别

1.重载是指子类改写父类的方法。

重载是编写一个与已有函数同名但参数表不同的方法,具体特征如下:

1)方法名必须相同

2)参数列表必须不相同,与参数列表顺数无关

3)返回值类型可不相同


2.重写是指同一函数的不同版本之间参数不同。

重写是派生类重写的虚函数,具体特征如下:

1)只有虚方法和抽象方法才能被重写

2)相同的函数名

3)相同的参数列表

4)相同的返回类型

### Java 方法重载方法重写的主要区别 #### 参数列表的不同处理方式 对于方法重载而言,在同一个类中可以存在多个同名但参数列表不同的方法。这些差异可以通过改变参数的数量、类型或顺序来体现[^3]。 而对于方法重写,则严格要求子类中的方法签名(包括名称、参数列表以及返回值类型)要父类中的相应方法保持一致,只有这样才能真正意义上构成覆盖关系而不是形成新的重载版本[^4]。 #### 访问控制符的要求不同 当涉及到继承时,如果一个子类打算重写来自其超类的方法,那么该子类定义下的新实现不允许设置更严格的访问级别。例如,假设父类有一个`public`级别的成员函数A(), 那么任何试图在派生自它的子类别里通过降低此函数可见度至protected甚至更低的做法都是非法的; 反之则允许增加可访问性程度[^2]。 相反地,由于方法重载发生在同一层次结构内部而不涉及跨代际间的关系传递问题,因此并不存在类似的约束条件施加于上边所提到的那种场景之上。 #### 返回类型的匹配规则有所差别 按照Java语言的规定,为了确保能够成功执行动态绑定操作从而达到预期效果即运行期调用最合适的那个具体实例所提供的服务接口而非仅仅局限于编译阶段静态决定的结果,所以被覆写后的目标实体应该维持原有的输出特征不变—这意味着二者之间必须共享相同的return type声明[^1]。 然而这并不适用于描述那些仅限于单个class体内发生的重复命名现象(也就是我们所说的overloading),因为在这种情况下即使改变了output specification也完全可以接受只要其他方面满足区分性的基本前提即可。 ```java // Method Overriding Example class Parent { protected void displayMessage() { System.out.println("Parent Message"); } } class Child extends Parent{ @Override // This annotation is optional but recommended. public void displayMessage(){ super.displayMessage(); // Call parent's method first if needed. System.out.println("Child Override Message"); } } // Method Overloading Example within same class public class Calculator { int add(int a, int b){ return a+b; } double add(double a,double b){ return a+b; } String concatenate(String str1,String str2){ return str1+str2; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值