更改Java中重写方法的访问修饰符?

有没有理由可以更改覆盖方法的访问修饰符?例如,

abstract class Foo{

void start(){...}

}

然后将package-private访问修饰符更改为public

final class Bar extends Foo{

@Override

public void start(){...}

}

我只是出于好奇而问这个问题。

回答:

Java不允许您对access修饰符进行 更严格的限制 ,因为这会违反以下规则:子类实例应该可以代替超类实例使用。但是当涉及到 减少

访问限制时……好吧,也许超类是由另一个人编写的,他们没有想到您要使用其类的方式。

人们编写的程序以及编程时所发生的情况千差万别,以至于语言设计人员最好不要“猜测”一下程序员可能想对他们的语言做什么。如果没有充分的理由使程序员 不能

使访问说明符对子类的限制减少(例如),那么最好将决定权交给程序员。他们知道各自情况的细节,但语言设计者则不知道。因此,我认为这对Java的设计者来说是一个很好的呼吁。

以上是 更改Java中重写方法的访问修饰符? 的全部内容, 来源链接: utcz.com/qa/403083.html

回到顶部