【发布时间】:2014-08-27 18:20:57
【问题描述】:
与实例的超类在同一包中的子类可以覆盖任何未声明为私有或最终的超类方法。
不同包中的子类只能覆盖声明为 public 或 protected 的非最终方法。
但是有什么区别呢?如果一个方法没有被声明为私有,那么它必须是公共的还是没有保护的?
【问题讨论】:
标签: java class overriding
与实例的超类在同一包中的子类可以覆盖任何未声明为私有或最终的超类方法。
不同包中的子类只能覆盖声明为 public 或 protected 的非最终方法。
但是有什么区别呢?如果一个方法没有被声明为私有,那么它必须是公共的还是没有保护的?
【问题讨论】:
标签: java class overriding
这点可以改写为:你只能覆盖你的类可以访问的方法,如果这个方法不是最终的。
因此,如果您在放置基类(或接口)的包之外创建类,则只能覆盖非最终的 public 和 protected 方法。
如果派生类与基类在同一个包中,那么您也可以在没有访问修饰符的情况下覆盖非最终方法(包保护)。
你永远不能覆盖私有方法。
【讨论】:
其实没有。
方法可以是公共的、受保护的、私有的或包私有。 如果您不指定访问修饰符,则该方法是包私有的。
很明显为什么来自不同包的类不能覆盖包私有成员。
【讨论】: