Java方法覆盖规则

以下是在正确覆盖方法时应考虑的规则-

  • 参数列表应与重写方法的列表完全相同。

  • 返回类型应该与超类中原始重写方法中声明的返回类型相同或为子类型。

  • 访问级别不能比重写方法的访问级别更严格。例如:如果将超类方法声明为public,则子类中的重写方法不能为private或protected。

  • 实例方法只有在子类继承的情况下才能被覆盖。

  • 声明为final的方法不能被覆盖。

  • 声明为static的方法不能被覆盖,但可以重新声明。

  • 如果无法继承方法,则无法覆盖该方法。

  • 与实例的超类相同的包中的子类可以覆盖未声明为私有或最终的任何超类方法。

  • 不同包中的子类只能覆盖声明为public或protected的非最终方法。

  • 无论重写方法是否引发异常,重写方法都可以引发任何uncheck异常。但是,重载方法不应抛出比被重载方法声明的异常新的或更广泛的检查异常。与重写方法相比,重写方法可以引发更窄或更少的异常。

  • 构造函数不能被覆盖。