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