功能

重写是为了增强类的重用性复用性扩展性
重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西,两全其美。


什么是重写

重写(Override)概念

  1. 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写
  2. 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法
  3. 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常

个人理解

在子类中可以根据需要对从基类中继承来的方法进行重写,重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西

官方理解

在Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。若子类中的方法与父类中的某一方法具有相同的方法名返回类型参数表,则新方法将覆盖原有的方法。 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

方法重写的一些特性

  1. 发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
  2. 子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
  3. 子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

根据2,3条可以确定第一条,子类重写父类方法的返回值类型不能大于父类方法的返回值类型,即是说子类方法的返回值必须和父类方法的返回值相同或是其子类。

  1. 父类与子类之间的多态性,对父类的函数进行重新定义。即在子类中定义某方法与其父类有相同的名称和参数。
  2. 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

注意:方法重写与方法重载不同,方法的重载是方法的参数个数或种类或顺序不同,方法名相同。

实例

父类Animal

  1. public class Animal {
  2. public void move(){
  3. System.out.println("狗可以跑和走");
  4. }
  5. }

子类Cat重写Animal的move()方法

  1. public class Cat extends Animal{
  2. public void move(){
  3. super.move();
  4. System.out.println("猫可以跳、可以吃小鱼");
  5. }
  6. }

TestAnimal

  1. public class TestAnimal {
  2. public static void main(String[] args) {
  3. Animal animal = new Animal(); // Animal 对象
  4. Animal cat = new Cat(); // Cat 对象
  5. //animal.move();// 执行 Animal 类的方法
  6. cat.move();//执行 Cat 类的方法
  7. }
  8. }

结果如下

  1. 狗可以跑和走
  2. 猫可以跳、可以吃小鱼