当前位置: 首页 > 面试题库 >

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

于鹏
2023-03-14
问题内容

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

abstract class Foo{
    void start(){...}
}

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

final class Bar extends Foo{
    @Override
    public void start(){...}
}

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


问题答案:

Java不允许您对access修饰符进行 更严格的限制 ,因为这会违反以下规则:子类实例应该可以代替超类实例使用。但是当涉及到 减少
访问限制时……好吧,也许超类是由另一个人编写的,他们没有想到您要使用其类的方式。

人们编写的程序以及编程时所发生的情况千差万别,以至于语言设计人员最好不要“猜测”一下程序员可能想对他们的语言做什么。如果没有充分的理由使程序员 不能
使访问说明符对子类的限制减少(例如),那么最好将决定权交给程序员。他们知道各自情况的细节,但语言设计者则不知道。因此,我认为这对Java的设计者来说是一个很好的呼吁。



 类似资料:
  • 根据留档(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)的第二个表,没有标识符的成员对子类不可见。 但是,当我运行下面的示例代码时,“1”(b的内容)被打印出来! 如果没有访问修饰符的成员不能从子类访问,那么为什么在本例中打印它 它应该抛出一个错误,就像在私有访问修饰符中一样,不是吗?

  • 我正在编写代码以匹配给定字符串或行的方法声明。这就是我的问题所在。当试图匹配修饰符时,当声明 工作。我一直都是这样 这就是我的问题。两者有什么区别,所有修饰符都一样吗?我相信这是有原因的,松散的顺序不是设计决定。 哦,如果有人知道匹配给定字符串的方法的最佳方法,请告诉我。谢谢。现在我正在使用正则表达式。

  • 下面的代码是创建(未显示)的方法的一部分,它有几个选项,如撤消、重做、剪切、复制、粘贴等。。。 类仅用于调试目的,但这是我通常放置类的地方 如您所见,我已经将“重做”动作的助记词设置为Y,将“剪切”动作设置为X。 我使用的是中的内置方法,它会自动将我的修改器设置为control,并在我想要的时候精确剪切文本。(CTRL-X) 这里的问题是:由于我的不使用DefaultEditorKit,它将修饰符

  • 问题内容: 我在理解Java(或其背后的设计)中的受保护的访问修饰符时遇到了一些麻烦。我认为这意味着程序包访问和通过继承包含抽象成员的类的对象的访问。 我编写了以下示例代码。我看到,如果未注释,注释掉的行会产生编译错误。为什么我可以通过Second中的Second对象而不是Second中的First对象访问pro? 问题答案: 该网页链接@MadProgrammer给出了一个体面的解释: “ pr

  • 在 Java 语言中提供了多个作用域修饰符,其中常用的有 public、private、protected、final、abstract、static、transient 和 volatile,这些修饰符有类修饰符、变量修饰符和方法修饰符。本文将详细介绍访问控制修饰符。 在实际生活中,如果要获取某件物品,与其直接穿过堡垒的墙壁,从而导致墙壁毁灭和破坏,不如通过门口的警卫请求进入堡垒的许可。一般而言

  • JAVA访问修饰符的可访问性 公众 在 同一班级 同一套餐 子类 宇宙/其他软件包 我在互联网上寻找这些问题的答案,因为我有多个答案。一个视频说未声明的访问修饰符是公共的,而我看到另一个书面来源说未声明的访问修饰符在子类和其他包中没有限制。试图确认哪个是真的。