2013-08-28 26 views
-2

我有一个超类与final方法的Java:不会强迫要覆盖

public final void foo(){ ... }

+0

您可以添加具有相同名称但签名不同的方法。否则编译器会打扰你。 –

+1

听起来像你在你的设计中有问题。除非孩子'foo'具有不同的签名,否则超级'foo()'不是最终的,我没有看到它发生。 – rocketboy

+0

我需要这两种方法完全一样,我不知道是否有一些注释用于此目的。 – Ahmad

回答

1

不,你不能做到这一点。

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

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

1

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

只有当它有一个不应该被改变的实现并且它对于对象的一致状态至关重要时才做最后的方法。

1

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

0

不知道为什么你必须具有相同的名称。要么是它的目的是一种不同的方法,那么它可以有一个不同的名字没有问题,或者你试图做一些凌驾你声称没有做的事情。

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

否则在子类中的方法不重写超类方法具有相同的名称如果任:

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