mre*_*mre 19 java overriding access-modifiers
有没有理由可以更改被覆盖方法的访问修饰符?例如,
abstract class Foo{
void start(){...}
}
Run Code Online (Sandbox Code Playgroud)
然后将package-private访问修饰符更改为public,
final class Bar extends Foo{
@Override
public void start(){...}
}
Run Code Online (Sandbox Code Playgroud)
我只是出于好奇而问这个问题.
Ale*_*x D 20
Java不允许您使访问修饰符更具限制性,因为这会违反子类实例应该可用于代替超类实例的规则.但是当谈到使访问限制较少时 ......好吧,也许超类是由不同的人编写的,他们没有预料到你想要使用他们的类的方式.
人们编写的程序和编程时出现的情况如此多样化,语言设计者最好不要"猜测"程序员可能想用他们的语言做什么.如果没有很好的理由,为什么程序员应该不能够使访问说明在子类中(例如)限制较少,那么最好离开这个决定的程序员.他们知道他们个人情况的具体情况,但语言设计师却不知道.所以我认为这是Java设计师的一个很好的调用.