更改访问修饰符

  • 从公共(public)到私有(private)
  • 从私有(private)到公共(public)

  • 更改 throw 子句
  • 更多异常
  • 减少异常

  • 更改返回类型
  • 到子类型
  • 到父类(super class)型

  • 拜托,有人能解释一下吗?

    最佳答案

    在覆盖中更改签名的经验法则是,如果对父级的有效调用不是对子级的有效调用,则不允许这样做。

    在您描述的场景中:

  • 从公共(public)到私有(private) NO 您正在从公共(public) API 中完全删除该方法,这肯定会破坏调用者
  • 从私有(private)到公共(public) 因为您现在允许更多调用者调用该方法(但不禁止任何以前的调用者)。对于可见性的任何增加都是如此( private 默认为 protectedpublic )。
  • 更多异常 NO 否,因为调用者需要捕获更多异常
  • 减少异常 因为允许调用者捕获永远不会抛出的异常
  • 到子类型 是的,因为子类型的每个实例也是父类(super class)型的实例。调用者返回的返回值将是预期类型的​​实例。
  • 到父类(super class)型 NO 否,因为调用者将期待一个子类型的实例,而您可以返回一个不同子类型的实例。

  • 您可以做的其他事情包括:
  • 将参数的类型更改为父类(super class)型,因为调用者将传入的子类型的任何实例也是父类(super class)型的有效值。
  • 将 throws 声明更改为异常的子类型,因为父类(super class)型异常的调用者捕获逻辑也将处理子类型异常。
  • 关于java - 你能覆盖一个父类(super class)的方法并......,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26781825/

    10-10 01:28
    查看更多