与实例的超类在同一个包中的子类可以覆盖任何未声明为private或final的超类方法。
不同包中的子类只能覆盖声明为public或protected的非final方法。
但有什么区别?如果某个方法未被声明为私有,那么它必须是公共的还是受保护的?
答案 0 :(得分:3)
这一点可以改为:您只能覆盖您的类可以访问的方法,以及此方法是否为最终。
因此,如果要在包中放置基类(或接口)的类,则只能覆盖非最终的 public 和 protected 方法。
如果派生类与基类位于同一个包中,那么您也可以覆盖非最终方法而不使用访问修饰符(包受保护)。
你永远不能覆盖私人方法。
答案 1 :(得分:2)
实际上,没有。
方法可以是public,protected,private或 package private 。 如果您未指定访问修饰符,则该方法为包私有。
很明显,为什么来自不同包的类不能覆盖包私有成员。
答案 2 :(得分:2)
区别在于default
(或package-private
)访问修饰符。如果未指定访问修饰符,则只有同一包中的其他类可以访问它,无论它们是否为子类。
有关详细信息:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html