相同的封装实例的超类内的子类可以覆盖未声明的私人或最终任何超类方法。
不同包中的子类只能覆盖声明为public或protected的非final方法。
的区别是什么关系吗?如果方法不声明为private,那么它必须是公共的或受保护的不是吗?
相同的封装实例的超类内的子类可以覆盖未声明的私人或最终任何超类方法。
不同包中的子类只能覆盖声明为public或protected的非final方法。
的区别是什么关系吗?如果方法不声明为private,那么它必须是公共的或受保护的不是吗?
其实没有。
方法可以是公开的,保护的,私人的或包私人。 如果您未指定访问修饰符,则此方法为包私有。
很明显,为什么来自不同包的类不能覆盖包私有成员。
区别在于default
(或package-private
)访问修饰符。如果不指定访问修饰符,则只有同一包中的其他类才能访问它,而不管它们是否是子类。
欲了解更多信息:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
这点可以表述为:你可以只覆盖到你的类访问方法,如果这个方法是不是最终。
因此,如果您包装件,其中基类(或接口)被置于可以覆盖唯一的非最终公共和保护方法之外创建类。
如果派生类与基类在同一个包中,那么您也可以在没有访问修饰符(包保护)的情况下覆盖非最终方法。
永远不能重写私有方法。