📅  最后修改于: 2023-12-03 14:42:20.496000             🧑  作者: Mango
在面向对象编程中,覆盖是指在子类中实现与父类同名同参数的方法,覆盖是Java继承特性的一种体现。通过覆盖我们可以重新定义继承的方法,使其适应自己的需求,从而在继承的基础上扩展或更改方法的行为。
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
void eat() { // 覆盖Animal的eat方法
System.out.println("Dog is eating");
}
}
class Main {
public static void main(String[] args) {
Animal a = new Animal();
a.eat(); // Animal is eating
Dog d = new Dog();
d.eat(); // Dog is eating
}
}
在上面的示例中,我们定义了一个Animal类和一个Dog类,Dog类继承了Animal类。我们覆盖了Animal类中的eat方法,并在Dog类中重新实现了这个方法。当我们调用a.eat()时,输出Animal is eating。当我们调用d.eat()时,输出Dog is eating。这说明我们成功覆盖了Animal的eat方法。
Java中的super关键字用于访问父类的成员变量或方法。当我们在子类中覆盖父类的方法时,可以使用super关键字调用父类的方法。
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
void eat() { // 覆盖Animal的eat方法
super.eat(); // 调用父类的eat方法
System.out.println("Dog is eating");
}
}
class Main {
public static void main(String[] args) {
Dog d = new Dog();
d.eat(); // Animal is eating
// Dog is eating
}
}
在上面的示例中,我们在Dog类中覆盖了Animal类的eat方法。使用了super.eat()来调用父类Animal的eat方法,确保在Dog的eat方法中也输出Animal is eating。
覆盖是Java继承的一种体现,通过覆盖我们可以重新定义继承的方法,使其适应自己的需求,从而在继承的基础上扩展或更改方法的行为。必须遵守覆盖的基本规则,同时也可以使用super关键字调用父类的方法。