我将尝试结合其他答案中的想法来提出一个答案。
首先,让我们看一下代码中正在发生的事情。
看一下代码
本
One类有一个包私有
foo方法:
class One { // The lack of an access modifier means the method is package-private. void foo() { }}在
Two该子类的类
One的类,并且所述
foo方法是被覆盖的,但具有访问修饰符
private。
class Two extends One { // The "private" modifier is added in this class. private void foo() { }}问题
Java语言不允许子类降低子类中方法,字段或类
Two的可见性,因此,降低该
foo方法可见性的类是不合法的。
为什么降低可见度是一个问题?
考虑我们要使用
One该类的情况:
class AnotherClass { public void someMethod() { One obj = new One(); obj.foo(); // This is perfectly valid. }}在这里,
foo在
One实例上调用方法是有效的。(假设
AnotherClass该类与该类位于同一包中
One。)
现在,如果我们要实例化
Two对象并将其放置在
obj类型的变量中
One怎么办?
class AnotherClass { public void someMethod() { One obj = new Two(); obj.foo(); // Wait a second, here... }}该
Two.foo方法是私有的,但是,该
One.foo方法将允许访问该方法。我们这里有问题。
因此,在考虑继承时允许降低可见性没有多大意义。
链接
- 控制对类成员的访问-Java教程中的访问修饰符的说明。



