定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。

要求:
1. 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
2. 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
3. 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
》子类不能重写父类中声明为private权限的方法
4.子类方法抛出的异常不能大于父类被重写方法的异常

注意:
子类与父类中同名参数的方法必须同时声明为非static的(即为重写),或者同时声明为static的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法。

package mk.bigdata.java.mk.bigdata.java2;

public class Person {

    String name;
    int age;

    public Person(){

    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println("吃饭");
    }

    public void walk(int distance){
        System.out.println("走路,走的距离是" + distance + "公里");
    }
}
package mk.bigdata.java.mk.bigdata.java2;

public class Student extends Person{

    String major;

    public Student(){}

    public Student(String major) {
        this.major = major;
    }

    public void study(){
        System.out.println("学习。专业是:" + major);
    }




     public void eat(){
        System.out.println("学生应该多吃有营养的食物");
    }
}
package mk.bigdata.java.mk.bigdata.java2;

/*
*
* 方法的重写(override/overwrite)
*1.重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作
*
*2.应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法,
* 实际执行的是子类重写父类的方法。
*
*
* 面试题:区分方法的重载与重写?
*
* 重载的规则
        必须具有不同的参数列表;
        可以有不同的返回类型,只要参数列表不同就可以了;
        可以有不同的访问修饰符;
        可以抛出不同的异常;
重写方法的规则
        参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
        返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
        访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
        重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

*
* */
public class PersonTest {
    public static void main(String[] args) {
        Student s = new Student("计算机科学与技术");
        s.eat();
        s.walk(10);

        s.study();

        Person p1 = new Person();
        p1.eat();
    }
}