是否可以在 Java 中重写私有方法\n
理论上是不能的。但是,使用一种取巧的方法,子类同样可以重写私有方法。参见下面的示例 −
示例
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.
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
安卓
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP