有人可以演示一个简单程序的示例吗,在该程序中,在工作程序中将一种方法的访问方式从私有更改为公开,将不会导致编译错误,而只会导致程序的行为有所不同?

另外,何时添加新的私有方法会导致编译错误或导致程序行为不同?

最佳答案

这与继承有关。子类可以具有与其父类中的私有方法具有相同签名的方法,但不能覆盖它。

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()

10-06 02:01