加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Overriding:哈哈,就不告诉你这 11 条规则

发布时间:2021-06-02 11:57:11 所属栏目:语言 来源:互联网
导读:重写带来了一种非常重要的能力,可以让子类重新实现从父类那继承过来的方法。在下面这幅图中,Animal 是父类,Dog 是子类,Dog 重新实现了 move() 方法用来和父类进行区分,毕竟狗狗跑起来还是比较有特色的。 重写的方法和被重写的方法,不仅方法名相同,

重写带来了一种非常重要的能力,可以让子类重新实现从父类那继承过来的方法。在下面这幅图中,Animal 是父类,Dog 是子类,Dog 重新实现了 move() 方法用来和父类进行区分,毕竟狗狗跑起来还是比较有特色的。

重写的方法和被重写的方法,不仅方法名相同,参数也相同(也就说是方法签名相同),只不过,方法体有所不同。

02、哪些方法可以被重写?

规则一:只能重写继承过来的方法。

因为重写是在子类重新实现从父类继承过来的方法时发生的,所以只能重写继承过来的方法,这很好理解。这就意味着,只能重写那些被 public、protected 或者 default 修饰的方法,private 修饰的方法无法被重写。

Animal 类有 move()、eat() 和 sleep() 三个方法:

public class Animal { 

    public void move() { } 

 

    protected void eat() { } 

     

    void sleep(){ } 

Dog 类来重写这三个方法:

public class Dog extends Animal { 

    public void move() { } 

 

    protected void eat() { } 

 

    void sleep(){ } 

OK,完全没有问题。但如果父类中的方法是 private 的,就行不通了。

public class Animal { 

    private void move() { } 

此时,Dog 类中的 move() 方法就不再是一个重写方法了,因为父类的 move() 方法是 private 的,对子类并不可见。

public class Dog extends Animal { 

    public void move() { } 

03、哪些方法不能被重写?

规则二:final、static 的方法不能被重写。

一个方法是 final 的就意味着它无法被子类继承到,所以就没办法重写。

public class Animal { 

    final void move() { } 

由于父类 Animal 中的 move() 是 final 的,所以子类在尝试重写该方法的时候就出现编译错误了!

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!