理想情况下没有。但是,使用这个复杂的代码,子类也可以覆盖私有方法。请参见下面的−示例
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.