Overriding:哈哈,就不告诉你这 11 条规则
重写带来了一种非常重要的能力,可以让子类重新实现从父类那继承过来的方法。在下面这幅图中,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 的,所以子类在尝试重写该方法的时候就出现编译错误了! (编辑:上饶站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |