JAVA何时使用覆盖(重写)操作

本文介绍了一种在面向对象编程中实现功能扩展的方法:通过子类覆盖父类的方法来添加新的特性,同时保留原有功能。以电话功能为例,展示了如何在不修改原始代码的基础上增加额外的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当需要对一个类进行功能的扩展时,子类需要保留父类的功能声明,但是要定义子类中该功能的特有内容时,此时需要使用覆盖。
正式项目中,不宜对原本源代码进行修改,而应在源代码基础上进行新增。

class Phone
{
    void call(){}
    void show()           //来电显示,仅显示了号码
    {
        System.out.println("number");
    }
}
class NewPhone extends Phone
{
    void show()     //扩展了来电显示的内容,添加了联系人姓名和图片
    {
        System.out.println("name");
        System.out.println("picture");
        super.show();
    }
}
### Java 中方法覆盖和方法重写的区别 #### 方法覆盖 (Overriding) 当子类提供了一个与其父类中声明相同的方法时,则认为该子类覆盖了这个方法。为了构成方法覆盖,几个条件必须满足: - 子类中的方法名必须与父类中的方法完全一致。 - 参数列表也需保持严格的一致性;这不仅指参数的数量相等,还意味着各个位置上的参数类型也要一一对应匹配。 - 返回类型要么相同,或者是其协变返回类型(对于Java SE 5之后版本支持),即返回类型的对象可以被赋给定义在超类里的相应变量。 下面是一个简单的例子来展示如何实现方法覆盖[^3]: ```java public class Animal { public void cry(){ System.out.println("动物cry"); } } public class Dog extends Animal{ @Override //此注解不是必需的,但它有助于编译器检查错误并提高代码可读性 public void cry(){ System.out.println("汪汪叫"); } } ``` 在这个例子中,`Dog` 类通过重新定义 `cry()` 方法实现了对来自 `Animal` 父类同名方法的覆盖。 #### 方法重载 (Overloading) 相比之下,方法重载发生在同一个类内部的不同形式的方法之间。如果在一个类中有两个或多个具有不同签名(不同的参数数量、顺序或是数据类型)但是名字相同的成员函数存在的话,就形成了所谓的“多态”。需要注意的是,在这种情况下,这些方法可以在同一作用域中共存而不发生冲突,并且它们各自独立地处理特定输入组合下的逻辑运算过程[^4]。 举个关于方法重载的例子如下所示: ```java class Calculator { int add(int a, int b){ return a+b; } double add(double a,double b){ return a+b; } float add(float a,float b,int c){ return a+b+c; } String add(String greeting,String name){ return greeting+" "+name; } } ``` 上述代码片段展示了四种不同方式调用名为 "add" 的加法操作——整数相加、浮点数求和以及字符串连接等情形均得到了妥善考虑和支持。 综上所述,虽然两者都涉及到创建新的行为模式以适应具体需求场景的要求,但在实际应用过程中还是存在着本质区别的:前者是在已有基础上做进一步细化调整而后者则是针对多种可能性提供了更加灵活的选择方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值