更改访问修饰符
从公共(public)到私有(private) 从私有(private)到公共(public)
更改 throw 子句
更多异常 减少异常
更改返回类型
到子类型 到父类(super class)型
拜托,有人能解释一下吗? 在覆盖中更改签名的经验法则是,如果对父级的有效调用不是对子级的有效调用,则不允许这样做。
在您描述的场景中:
从公共(public)到私有(private) NO 您正在从公共(public) API 中完全删除该方法,这肯定会破坏调用者 从私有(private)到公共(public) 是 因为您现在允许更多调用者调用该方法(但不禁止任何以前的调用者)。对于可见性的任何增加都是如此( private
默认为 protected
到 public
)。 更多异常 NO 否,因为调用者需要捕获更多异常 减少异常 是 因为允许调用者捕获永远不会抛出的异常 到子类型 是 是的,因为子类型的每个实例也是父类(super class)型的实例。调用者返回的返回值将是预期类型的实例。 到父类(super class)型 NO 否,因为调用者将期待一个子类型的实例,而您可以返回一个不同子类型的实例。
您可以做的其他事情包括:
将参数的类型更改为父类(super class)型,因为调用者将传入的子类型的任何实例也是父类(super class)型的有效值。 将 throws 声明更改为异常的子类型,因为父类(super class)型异常的调用者捕获逻辑也将处理子类型异常。