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

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

发布时间:2022-12-05 12:45:19 所属栏目:语言 来源:
导读:  重写带来了一种非常重要的能力,可以让子类重新实现从父类那继承过来的方法。在下面这幅图中,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 的,所以子类在尝试重写该方法的时候就出现编译错误了!
 

(编辑:云计算网_汕头站长网)

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