【问题标题】:Java: Forcing Not to OverrideJava:强制不覆盖
【发布时间】:2013-08-28 09:45:15
【问题描述】:

我有一个带有 final 方法的超类

public final void foo(){ ... }

【问题讨论】:

  • 你可以添加同名的方法,但不同的签名。否则编译器会打扰你。
  • 听起来你的设计有问题。除非子 foo 有不同的签名或者超级 foo() 不是最终的,否则我看不到它发生。
  • 我需要两个方法完全一样,不知道有没有这个目的的注解。
  • 这听起来像是你对其他一些概念有错误的想法,你试图让它以完全错误的方式工作。你试图做的不是一个好主意。
  • 你的问题没有意义。 “覆盖”意味着提供另一个具有相同名称和签名的方法。你不能做到这一点'没有覆盖'。期间。

标签: java oop inheritance overriding


【解决方案1】:

不,你不能这样做。

不能用标记为final 的超类方法覆盖子类中的方法 .您可以添加具有不同签名的方法

final 关键字应用于方法的目的是它不允许子类方法覆盖它。

【讨论】:

    【解决方案2】:

    final 的主要目的是防止覆盖。所以,你不能覆盖 final 方法。 你仍然可以重载 final 方法。

    【讨论】:

      【解决方案3】:

      您不能覆盖final 超级方法。但您可以重载它。

      仅当方法具有不应更改的实现并且对对象的一致状态至关重要时才将其设为最终方法。

      【讨论】:

        【解决方案4】:

        你不能。 final 关键字可以防止这种情况发生。 见final methods in Java on Wikipedia

        【讨论】:

          【解决方案5】:

          不清楚为什么你必须有相同的名字。要么它打算成为一种不同的方法,然后它可以有一个不同的名称而没有问题,或者你正在尝试做某种你声称不做的覆盖。

          如果您的子类需要一个干扰该方法的接口实现,请考虑为该接口实现一个内部类。

          否则,子类中的方法不会覆盖具有相同名称的超类方法,如果:

          • 它有不同的参数类型
          • 超类方法是私有的
          • 超类方法是包私有的,子类位于不同的包中

          【讨论】:

            猜你喜欢
            • 2017-12-28
            • 1970-01-01
            • 1970-01-01
            • 2015-05-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-14
            • 2016-02-12
            相关资源
            最近更新 更多