一方面,我有一个带抽象方法的抽象类。 另一方面,我有一个子类,它覆盖了抽象方法并指定了" public"访问修饰符。
我对原始抽象类的可见性是否有意义'抽象方法?
答案 0 :(得分:6)
在Java中,允许子类在覆盖方法时“增加”方法的可见性,但不“减少”它。即可以覆盖protected
方法public
,但public
方法无法覆盖并生成protected
。
保持超类方法protected
的意义(这里不需要超类或方法abstract
)是允许子类覆盖方法并保留它protected
或者public
。如果超类生成方法public
,那么强制任何覆盖该方法的子类使该方法保持public
。
JLS, Section 8.4.8.3涵盖了这些要求:
覆盖或隐藏方法的访问修饰符(第6.6节)必须至少提供与重写或隐藏方法一样多的访问权限,如下所示:
如果被覆盖或隐藏的方法是公共的,则覆盖或隐藏方法必须是公共的;否则,发生编译时错误。
如果被覆盖或隐藏的方法受到保护,则必须保护或隐藏覆盖或隐藏方法;否则,发生编译时错误。
如果被覆盖或隐藏的方法具有包访问权限,则覆盖或隐藏方法不能是私有的;否则,发生编译时错误。