重载和重写的区别

问:重载和重写有什么区别?

答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问(访问权限大于等于父类),不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

### 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、付费专栏及课程。

余额充值