有人可以演示一个简单程序的示例吗,在该程序中,在工作程序中将一种方法的访问方式从私有更改为公开,将不会导致编译错误,而只会导致程序的行为有所不同?
另外,何时添加新的私有方法会导致编译错误或导致程序行为不同?
最佳答案
这与继承有关。子类可以具有与其父类中的私有方法具有相同签名的方法,但不能覆盖它。
public class Scratchpad {
public static void main(String[] args) {
new Sub().doSomething();
}
}
class Super {
public void doSomething() {
System.out.println(computeOutput());
}
private String computeOutput() {
return "Foo";
}
}
class Sub extends Super {
public String computeOutput() {
return "Bar";
}
}
如果按原样运行,则会得到
Foo
。如果将Super#computeOutput()
更改为public
,则会得到Bar
。这是因为Sub#computeOutput()
现在将覆盖Super#computeOutput()
。