重载和重写的区别是什么(摒弃大段文字,用图表对比)? 举一个现实生活中无法互相替代的情况,并用代码实现。
时间: 2024-12-23 21:17:06 浏览: 10
**重载(Overloading)与重写(Overriding)的区别:**
想象一下烹饪中的调料,我们可以有两个名为“盐”的东西,一个是用于炖肉的大颗粒海盐,另一个是用于烘焙的小颗粒食盐。这就是方法重载的概念——在相同的命名下,提供了多个函数,它们有不同的参数类型或数量。在程序中,如Java:
```java
public class Seasoning {
public void addSalt(int quantity) { ... } // 海盐,处理大量量
public void addFineSalt(double amount) { ... } // 食盐,处理小量度
}
```
**重写(Overriding)则类似这样的场景:**假设我们有一个基础菜谱,父类"BaseRecipe"规定了添加"调味料"的方法。子类"SteakRecipe"作为特殊类型的肉类料理,需要特定的细盐来提升风味,所以它重写了这一方法:
```java
class BaseRecipe {
public void addSeasoning(String seasoning) { ... }
}
class SteakRecipe extends BaseRecipe {
@Override
public void addSeasoning(String fineSalt) { ... } // 要求细盐,替换父类的通用调味料方法
}
```
在这个例子中,当我们创建`SteakRecipe`实例并调用`addSeasoning`方法时,实际上是执行`SteakRecipe`中定义的那个细盐版本。
现实生活中的例子:比如银行ATM机,一台机器可能支持不同类型的卡(借记卡、信用卡等),每个卡都有自己的取款额度和交易类型,这就体现了方法的重载;而另一种情况是自助服务点的自助查询功能,虽然名字叫“查询”,但银行卡查询、账户余额查询和交易记录查询等则是对同一个操作的不同实现,这是重写。
阅读全文