重载和重写的区别

重载:多个同名方法,根据不同传参,实现不同的逻辑。

  • 发生在同一个类中
  • 发生在编译期
  • 方法名必须相同,参数列表必须不同(个数不同,类型不同,顺序不同)
  • 访问修饰符和返回值类型可以不同
  • 构造方法可以被重载

重写(覆盖):子类对父类的方法的重新编写,实现不同的逻辑。

  • 发生在子类中
  • 发生在运行期
  • 方法名和参数列表必须和父类方法一致
  • 返回值类型必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类
  • 构造方法不能被重写
  • 用final/static/private修饰的方法不能被重写
### Java 中方法重载与方法重写区别 #### 方法重载 (Overloading) 方法重载是指在一个类中定义多个同名但参数不同的方法。这些差异可以体现在参数的数量不同、参数类型的顺序不同等方面。需要注意的是,方法的返回类型并不影响是否构成重载。 ```java class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } } ``` 上述例子展示了 `add` 方法的不同版本,它们具有相同的名称但是接受不同类型或数量的参数[^3]。 #### 方法重写 (Overriding) 当子类提供了一个与其父类中存在的某个声明完全一致的方法时,则认为该子类覆盖了这个来自超类的方法。这意味着两个方法应该有同样的签名(即相同的名字、参数列表以及返回值),并且子类中的访问控制符不应更严格于父类中的相应成员。 ```java class Animal { public void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override public void sound() { super.sound(); // 调用父类的方法 System.out.println("Dog barks"); } } ``` 在这个案例里,`Dog` 类通过继承自 `Animal` 并实现了自己的 `sound()` 函数来展示如何正确地执行方法重写操作[^1]。 另外值得注意的一点是,在Java中如果想要在子类里面既调用自己的实现也能够访问到父类中原有的行为的话可以通过关键字 `super` 来完成这一目标[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值