Java:将代码移动到另一个类后调用super

时间:2012-05-28 13:48:20

标签: java super

我有一个被覆盖的方法,在这个方法中,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? */

}

2 个答案:

答案 0 :(得分: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);
    }

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

答案 1 :(得分:0)

你可以简单地让Class2扩展与Class1相同的类。

本答案的其余部分假定Class1不从Class2继承。

如果没有进一步的背景,很难说这是否合适,但您可以尝试更改

public boolean onOptionsItemSelected(MenuItem item)

public static boolean onOptionsItemSelected(MenuItem item),然后致电

YourClassName.onOptionsItemSelected(yourArgument)