首页 > 编程笔记 > Java笔记 阅读:47

Java方法重写(Override)详解(附带实例)

方法重写是指子类中定义了一个与父类中同名、同参数列表和同返回类型的方法,从而覆盖父类中该方法的实现。方法重写也叫作方法覆盖。

在某些情况下,父类提供的方法并不适用于子类。例如:
public class Animal {
    // 定义私有的属性:name
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 定义成员方法:eat 方法
    public void eat() {
        System.out.println("Animal 动物吃东西");
    }
}
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("Cat 猫吃猫粮");
    }

    // 子类中特有的方法
    public void sleep() {
        System.out.println("猫在睡觉");
    }
}
在程序中,Animal 类提供的属性和方法并不一定适用于 Cat 类,因为不同动物吃的东西是不同的,所以 Cat 类中的 eat() 方法需要考虑 Cat 吃的是猫粮,所以需要覆盖该方法。

Java方法重写的规则与要求

1) 方法名称、参数列表和返回类型必须与父类中被重写的方法完全一致:
2) 访问权限不能比父类中被重写的方法更严格,访问权限可以相同或更宽松:

Java方法重写的实现

通过子类对象调用被重写的方法时,实际执行的是子类中重写后的方法,而不是父类中的原始方法。这是 Java 运行时多态性的体现。

【实例】在使用继承的前提下,继续实现方法重写,代码如下:
public class Animal {
    // 定义私有的属性:name
    private String name;
    public Animal() {
        System.out.println("Animal Constructor");
    }
    public Animal(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // 定义成员方法:eat 方法
    public void eat(){
        System.out.println("Animal 动物吃东西");
    }
}

public class Cat extends Animal{
    public Cat() {
        System.out.println("Cat Constructor");
    }
    public Cat(String name) {
        super(name);
    }
    @Override
    public void eat() {
        System.out.println("Cat 猫吃猫粮");
    }
    // 子类中特有的方法
    public void sleep(){
        System.out.println("猫在睡觉");
    }
}
程序运行结果为:

Animal Constructor
Cat Constructor
Cat 猫吃猫粮

在上述代码中,Cat 类中的 eat() 方法重写了 Animal 类中的 eat() 方法,以实现各自特定的输出,会执行相应的子类中重写的方法。@Override 注解用于标注此方法是重写方法,仅具有标注作用,并无实际意义。

Java 程序中,有以下两点需要注意:

相关文章