定义

  • 在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
  1. 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
  2. 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
  3. 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
    1. 子类不能重写父类中声明为private权限的方法
  4. 子类方法抛出的异常不能大于父类被重写方法的异常

Person类

  1. public class Person{
  2. String name;
  3. int age;
  4. public Person(){
  5. }
  6. public Person(String name,int age){
  7. this.name = name;
  8. this.age = age;
  9. }
  10. public void eat(){
  11. System.out.println("吃饭");
  12. }
  13. public void walk(int distance){
  14. System.out.println("走了" + distance + "公里");
  15. }
  16. }

Student类

  1. public class Student extends Person{
  2. String major;
  3. public Student() {
  4. }
  5. public Student(String major) {
  6. this.major = major;
  7. }
  8. public void study(){
  9. System.out.println("学习,专业是:" + major);
  10. }
  11. // 重写父类的方法
  12. public void eat(){
  13. System.out.println("学生吃营养的事物");
  14. }
  15. }
  • 重写,子类继承父类后,可以对父类中同名同参数的方法,进行覆盖操作

重写的规定

  • 方法的声明

    1. 权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{
    2. 方法体
    3. }
  • 子类重写的方法的方法名和父类被重写的方法名和形参列表相同

  • 子类重写的方法的权限修饰符不小于父类被重写的方法的权限
    • 特殊:子类不能重写父类中权限为 private 的方法
  • 返回值类型
    • 父类被重写的方法的返回值类型是 void 类型,则子类重写的方法的返回值类型只能是 void 类型
    • 父类被重写的方法的返回值类型是 A 类型,则子类重写的方法的返回值类型可以是 A 类或者 A 类的子类
    • 父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法的返回值类型只能是相同基本数据类型
  • 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
  • 子类和父类中同名同参数的方法要么声明为非static,要没都声明为static的