有人可以演示一个简单程序的示例,在这个示例中,将一个方法的访问权限从私有(private)更改为公共(public),不会导致编译错误,只会导致程序的行为不同吗?
此外,什么时候添加新的私有(private)方法会导致编译错误或导致程序表现不同?
最佳答案
这与继承有关。子类可以拥有与其父类中的私有(private)方法具有相同签名的方法,但不能覆盖它。
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()
。
关于java - 在没有编译错误的情况下更改对方法的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016198/