Java的方法重写(覆盖)

概念:方法的覆盖就是子类有一个方法和父类的某个方法的名称、返回类型、参数都是一样的,那么就可以说子类的这个方法覆盖了父类的这个方法。
目的:解决子类和父类方法上的不同。

注:

1、子类的方法的返回类型、名称、参数要和父类完全一样。    
2、子类方法不能缩小父类方法的访问权限。(例如:父类的方法是public的
,而子类的方法写成protected,则就是缩小了访问的权限,这样是不行的)(但是如果
父类是protected,而子类写成public,则是可以的,扩大了父类的访问权限,这仍然
属于方法覆盖。)
3、父类的静态方法不能被子类写为非静态方法,当然,父类的非静态方法也不能被子类写为静态方法。
4、方法重写只针对实例方法,父类中的静态方法只能被子类隐藏、继承和重载。
5、父类中能被继承的实例方法,才能被重写。
6、子类中重写的方法不能比父类中被重写的方法抛出更多异常。

重写的具体用法

class Fow1{
    *protected* void show(){
        System.out.println("我是一朵花");
    }
}
class Fow2 extends Fow1{
    //此处就相当于是扩大了访问权限
    *public* void show(){
        System.out.println("我是一朵玫瑰花");
    }
}
### Java方法重写的规则 在 Java 编程中,方法重写是一项关键特性,允许子重新定义父中的同名方法。为了确保程序的正确性和一致性,Java方法重写设定了严格的规则。 #### 子与父的关系 只有当两个之间存在继承关系时,才可能发生方法重写。即子能够重写来自其直接或间接父方法[^1]。 #### 名称和签名的一致性 被重写方法必须具有相同的名称、返回型(或兼容的协变返回型)、参数列表以及抛出异常型的匹配度。这意味着如果父有一个不带任何参数并返回 `int` 型的方法,则子也应如此声明该函数[^2]。 #### 访问权限控制符的要求 通常来说,子里用于覆盖方法不能拥有更严格访问级别的修饰词;也就是说,假如父级成员是 public 或 protected 的话,在派生出来的别里面就不能变成 private 。然而,反过来是可以接受的——更加宽松的可见级别是允许增加的[^3]。 #### 静态上下文中不允许发生覆写行为 静态方法属于编译期绑定,因此它们不会参与运行时期的动态分发机制,所以无法通过这种方式来改变原有功能的表现形式。同样地,final 关键字标记下的实体也不可再做进一步调整因为这代表最终版本不可更改[^4]。 ### 示例代码展示 下面给出一段简单的例子说明上述原则: ```java class Parent { // 定义了一个普通的实例方法 disp() void disp() { System.out.println("disp() method of parent class"); } } // 创建 Child 继承自 Parent 并尝试重载 disp 方法 public class Child extends Parent { @Override // 使用此注解表明我们正在执行的是方法重写操作而非意外创建新方法 void disp(){ super.disp(); // 调用父版本的方法 System.out.println("disp() method overridden in child class"); } } ``` 在这个案例中,Child 成功地实现了对 Parent 中 disp 方法的有效重写,并且保留了原有的逻辑结构同时增加了新的输出语句[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值