是否有一个';新';Java中方法的修饰符?

是否有一个';新';Java中方法的修饰符?,java,inheritance,junit,Java,Inheritance,Junit,Java中是否有一个等价于修饰符的修饰符 我想在单元测试中使用它——每个init()方法都应该标记为final,并用@Before注释。然后,jUnit执行所有这些init()方法 我不想为这些init()方法中的每一个都提供新的名称,而且我肯定想将它们标记为final,以确保它们不会相互重写(另一种模式是从每个init()方法重写并调用super.init()。不幸的是,没有。见鬼,在@Override之前,在重写时甚至没有任何防止输入错误的方法 如果不重写超类方法,则无法创建与超类方法具有相

Java中是否有一个等价于修饰符的修饰符

我想在单元测试中使用它——每个init()方法都应该标记为final,并用@Before注释。然后,jUnit执行所有这些init()方法


我不想为这些init()方法中的每一个都提供新的名称,而且我肯定想将它们标记为final,以确保它们不会相互重写(另一种模式是从每个init()方法重写并调用super.init()。

不幸的是,没有。见鬼,在
@Override
之前,在重写时甚至没有任何防止输入错误的方法

如果不重写超类方法,则无法创建与超类方法具有相同签名的方法。诚然,即使在C#中,我也尽量不这样做


您是否考虑过将
initFoo
initBar
分别用于类
Foo
Bar
(etc)?这是一个足够简单的模式,可以避免名称冲突。不可否认,这有点难看。

Java没有与C#
new
运算符等价的运算符

用于从基类成员隐藏继承的成员


对于您想要做的事情,为什么不创建一个其他测试可以扩展的基类,并在基类中创建一个名为
init()
(用
@Before
标记)的
抽象方法呢?这迫使所有子类提供一个
init()
方法。

一个常见模式是将您自己的“before”方法设置为final,并为子类创建受保护的(抽象)方法

在超类中 在子类中 这将为您提供两个世界中最好的:

  • 在子类中重写的著名方法
  • 覆盖是可选的
  • 超类方法永远不会被重写
  • 当超类决定时,即在超类决定之前或之后调用客户机方法

它确实有一个缺点——它将您与一个超级类联系在一起。不过,这对您的环境来说可能不是问题。

问题确实与单个基类有关。如果类停止继承基类,则永远不会调用onBefore()方法。
@Before
public final void before() {
   onBefore();
}

protected void onBefore()  {

}
protected void onBefore() {
    // prepare the test fixture
}