理想情况下没有。但是,使用这个复杂的代码,子类也可以覆盖私有方法。请参见下面的−示例
示例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方法。
虽然在覆盖方法时不需要使用此注解,但它有助于防止错误。如果标记为@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.