0

我有一个被覆盖的方法,在这个方法中 super 用于调用被覆盖的方法。但是,此方法中的代码是我在多个类中使用的代码,因此我想通过将其放入一个类中的单个方法中来重用此代码。但是由于这段代码使用了关键字 super,我不确定如何将覆盖方法的引用传递给我的新方法。例如,这里是原始方法 inc class1:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
   /* Lots of code goes here, followed by the super call */
   return super.onOptionsItemSelected(item);
}

在类 2 中:

public boolean onOptionsItemSelected(MenuItem item)
{
   /* Code from class1 gets relocated here. But how do I call super on the original method? */

}
4

2 回答 2

1

好吧,除非类 2 是您的类 1 的共同祖先,否则您不能使用 super 调用它。如果您将代码移动到另一个与继承无关的类,您将被迫使用对象组合,也就是说,您的类 1(现在超级调用所在的位置)将需要对类 2(代码已移动到的位置)的对象引用) 对象以获得对给定方法的访问权限。

public boolean onOptionsItemSelected(MenuItem item)
{
   /* Lots of code goes here, followed by the super call */
   return this.myRef.onOptionsItemSelected(item);
}

或者,您可以将有问题的方法设为静态,在这种情况下,您可以通过公开它的类来访问它(假设它称为 Util)。

public boolean onOptionsItemSelected(MenuItem item)
    {
       /* Lots of code goes here, followed by the super call */
       return Util.onOptionsItemSelected(item);
    }

但是,根据方法的作用,将其设为静态可能不是一种选择。

于 2012-05-28T13:52:00.287 回答
0

您可以简单地使 Class2 扩展与 Class1 相同的类。

该答案的其余部分假设 Class1 不继承自 Class2。

没有进一步的上下文,很难说这是否合适,但你可以尝试改变

public boolean onOptionsItemSelected(MenuItem item)

public static boolean onOptionsItemSelected(MenuItem item), 并调用

YourClassName.onOptionsItemSelected(yourArgument)

于 2012-05-28T13:53:34.930 回答