访问修饰符继承:关于抽象方法

时间:2014-12-10 17:45:49

标签: java inheritance methods polymorphism abstract

一方面,我有一个带抽象方法的抽象类。 另一方面,我有一个子类,它覆盖了抽象方法并指定了" public"访问修饰符。

我对原始抽象类的可见性是否有意义'抽象方法?

1 个答案:

答案 0 :(得分:6)

在Java中,允许子类在覆盖方法时“增加”方法的可见性,但不“减少”它。即可以覆盖protected方法public,但public方法无法覆盖并生成protected

保持超类方法protected的意义(这里不需要超类或方法abstract)是允许子类覆盖方法并保留它protected或者public。如果超类生成方法public,那么强制任何覆盖该方法的子类使该方法保持public

JLS, Section 8.4.8.3涵盖了这些要求:

  

覆盖或隐藏方法的访问修饰符(第6.6节)必须至少提供与重写或隐藏方法一样多的访问权限,如下所示:

     
      
  • 如果被覆盖或隐藏的方法是公共的,则覆盖或隐藏方法必须是公共的;否则,发生编译时错误。

  •   
  • 如果被覆盖或隐藏的方法受到保护,则必须保护或隐藏覆盖或隐藏方法;否则,发生编译时错误。

  •   
  • 如果被覆盖或隐藏的方法具有包访问权限,则覆盖或隐藏方法不能是私有的;否则,发生编译时错误。

  •