📅  最后修改于: 2023-12-03 14:42:58.011000             🧑  作者: Mango
在Java中,方法覆盖(Overriding)是一种让子类重写父类中的方法,并且新的方法具有相同名称、参数和返回类型的技术。
Java中的方法覆盖允许开发人员在不更改父类代码的情况下修改特定方法行为,并且需要在方法签名上带有 @Override 注释,以确保它真的是一个Overriding方法。
要覆盖一个方法,您需要将子类中的方法声明为具有与父类中该方法相同的名称、参数和返回类型。您还可以选择更改子类中方法的访问修饰符,如 'public'、'private' 和 'protected',但是只能升高方法的可访问性,不能降低。例如,如果父类中的方法是protected,则子类要覆盖该方法时,也只能使用protected 或者 public 修饰符。
还需要注意的是,子类中覆盖的方法必须与父类中的方法具有相同的名称和参数。返回类型可以是相同的(除了基本类型之外),也可以是其子类型(协变返回类型),或者返回一个基本类型值的封装器类对象,如 Boolean、Character、Integer 等。
覆盖方法的示例代码如下:
class Parent {
public void print() {
System.out.println("This is Parent class");
}
}
class Child extends Parent {
@Override
public void print() {
System.out.println("This is Child class");
}
}
public class Main {
public static void main(String[] args) {
Parent p = new Child();
p.print();
}
}
输出结果:
This is Child class
在上面的示例中,我们定义了两个类 Parent 和 Child,其中 Child 继承自 Parent。在 Parent 中定义了一个名为“print”的方法,而在 Child 中,我们覆盖了该方法并更改了它的实现。
在 Main 类中,我们创建了一个 Parent 类型的对象 p,并将其赋值为 Child 类型的实例。确实是一个有趣的用法,它实例化一个子类并将其引用存储在超类对象中。我们在这里调用 print() 方法,并且输出结果表明,打印出来的是子类的实现。
在一些情况下,我们需要重写父类中的方法,以满足我们的需求,Java中的方法覆盖机制使得在使用继承时,我们编写代码更加灵活。我们可以通过复用父类的方法,并在子类中更改其行为,以达到解决问题的目的。