尚硅谷JavaSE基础

6.6.2方法覆盖(override)

1. 什么是方法覆盖

定义

在子类中可以根据需要对从父类中继承来的方法进行改造,

也称方法的重写、重置。在程序执行时,子类的方法将覆盖父类的方法。

要求:

覆盖方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。

覆盖方法不能使用比被重写方法更严格的访问权限。

覆盖和被覆盖的方法必须同时为非static的。

子类方法抛出的异常不能大于父类被重写方法的异常

public class Person {

public String name;

public int age;

public String getInfo() {

return "Name: "+ name + "\n" +"age: "+ age;

    }

}

public class Student extends Person {

public String school;

int age;

public String getInfo() {       //重写方法

return  "Name: "+ name + "\nage: "+ age + "\nschool: "+ school;

}

public static void main(String args[]){

Student s1=new Student();

s1.name="Bob";

s1.age=20;

s1.school="school2";

System.out.println(s1.getInfo());   //Name:Bob  age:20  school:school2 执行的是子类重写过的方法

}

}

2.为什么要方法覆盖

有的时候子类继承的父类方法并不能满足子类的需要, 而方法名称又要保持一致, 此时用到方法覆盖.

3. 方法覆盖的特殊性

子类一旦把父类的方法覆盖, 那么在测试类中再无法通过子类对象调用父类的被覆盖方法了, 因为子类已经把父类的方法重写了, 如果有调用父类方法的需求, 只能通过再创建一个父类对象来调用.

4. @Override注解的使用

有的时候, 在子类中写重写方法时, 容易出现一些低级的拼写错误, 或其他错误, 导致方法不能正确覆盖时, 程序的运行就会出乎意外, 所以为了防止这种现象, 在子类的覆盖方法上添加修饰符@Override注解.

注解 : 本质上一种类, 也是一种特殊的注释, 所以一般情况下,  程序不执行注解, 但是会被编译器, 运行时所识别和处理(通过反射的方式).注解也有很多.

@Override注解的作用是告诉编译器, 在编译程序时, 必须先检查此方法是否满足方法覆盖的条件, 如果不满足, 则编译出错, 这样强制程序员通过排查, 提前检查方法覆盖的问题.

public class Student extends Person {

public String school;

int age;

    @Override // 加上注解, 也能提高代码可读性

public String getInfo() {       //重写方法

return  "Name: "+ name + "\nage: "+ age + "\nschool: "+ school;

}

}