在编程中,覆盖(Override)是指子类对父类中的方法进行重新编写,以实现不同的功能。覆盖的方法必须满足以下条件:
方法名相同:
子类中的方法名必须与父类中的方法名完全一致。
参数列表相同:
子类方法的参数列表必须与父类方法的参数列表完全相同,包括参数的数量和类型。
返回类型相同:
子类方法的返回类型必须是父类方法返回类型的子类型或相同类型。
访问权限不能更严格:
子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限(例如,如果父类方法是`public`,那么子类方法也必须是`public`)。
不能抛出更多异常:
子类方法不能比父类方法抛出更多的异常。
在Java中,覆盖方法时可以使用`@Override`注解,这有助于编译器检查方法是否正确地覆盖了父类方法。
```java
class Parent {
public void display() {
System.out.println("This is the parent class method.");
}
}
class Child extends Parent {
@Override
public void display() {
System.out.println("This is the child class method.");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display(); // 输出 "This is the child class method."
}
}
```
在这个示例中,`Child`类继承了`Parent`类,并覆盖了`display`方法。当调用`child.display()`时,将执行`Child`类中的`display`方法,而不是`Parent`类中的方法。
此外,如果需要在子类方法中调用父类的方法,可以使用`super`关键字。例如:
```java
class Parent {
public void display() {
System.out.println("This is the parent class method.");
}
}
class Child extends Parent {
@Override
public void display() {
super.display(); // 调用父类的display方法
System.out.println("This is the child class method.");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display(); // 输出 "This is the parent class method. This is the child class method."
}
}
```
在这个示例中,`Child`类的`display`方法首先调用父类的`display`方法,然后执行子类自己的代码。