我们可以覆盖Java中的私有方法吗
理想情况下没有。但是,使用这个复杂的代码,子类也可以覆盖私有方法。请参见下面的−示例
示例
class A {
private void display() {
System.out.println("A.display");
}
public void callDisplay() {
System.out.println("A.callDisplay");
display();
}
}
class B extends A {
private void display() {
System.out.println("B.display");
}
public void callDisplay() {
System.out.println("B.callDisplay");
display();
}
}
public class Tester {
public static void main(String[] args) {
A a = new B();
a.callDisplay();
B b = new B();
b.callDisplay();
A a1 = new A();
a1.callDisplay();
}
}输出结果
B.callDisplay B.display B.callDisplay B.display A.callDisplay A.display
在上面的例子中,一个对象是B类的,a.callDisplay()调用B的callDisplay()方法,然后调用B的display方法。
根据Java文档Java教程:预定义的注释类型。
虽然在覆盖方法时不需要使用此注解,但它有助于防止错误。如果标记为@override的方法未能正确覆盖其超类中的某个方法,则编译器将生成错误。
在B.display()方法上添加@Override注解。Java编译器将引发错误。
class B extends A {
@Override
private void display() {
System.out.println("B.display");
}
public void callDisplay() {
System.out.println("B.callDisplay");
display();
}
}输出结果
The method display() of type B must override or implement a supertype method.