Jos*_*osh 2 java overriding overloading anonymous-class
我有一个类Action,它有一个叫做doAction()的方法.此方法仅用于覆盖我添加到名为allActions的操作列表的每个新操作.
public void doAction() {
System.out.println("Overload this method.");
}
Run Code Online (Sandbox Code Playgroud)
操作列表存储在以下列表中:
public static List<Action> allActions = new ArrayList<Action>();
Run Code Online (Sandbox Code Playgroud)
并通过以下调用添加到此列表中:
allActions.add(
new Action(id){
public void doAction(Word w1, Word w2) {
//perform some action
}
}
);
Run Code Online (Sandbox Code Playgroud)
但是这段代码对我不起作用.当我尝试从allActions列表中访问覆盖的doAction()方法时,它只执行默认方法.
我怀疑问题是allActions是一个Action对象列表,所以当它被添加到列表中时,类型可能会从匿名类更改,并恢复为默认方法.
有关如何维护Action类的不同匿名版本列表的任何想法?我希望能够根据赋予操作的id调用这些不同的doAction()方法.
顺便说一下,这是我第一次遇到匿名课程.我想我理解这个概念,但实际上使用它们是另一个故事.
public class Anonymous {
static class Action {
int id;
Action(int id) {
this.id = id;
}
void doAction(){
System.out.println("Overload this method..."+ id);
}
}
public static void main(String[] args) {
ArrayList<Action> actions = new ArrayList<Action>();
actions.add(new Action(0));
actions.add(new Action(1){void doAction() {System.out.println("Overloading..."+ this.id);}});
actions.add(new Action(2){void doAction() {System.out.println("Overloading..."+ this.id);}});
for (Action a: actions) {
a.doAction();
}
}
}
Run Code Online (Sandbox Code Playgroud)
该代码是关于如何维护Action类的不同匿名版本列表的简单演示.它有效.
您遇到的问题是您实际上没有覆盖该doAction()方法.相反,你重载了它.
当我尝试从allActions列表中访问覆盖的doAction()方法时,它只执行默认方法.
这是因为匿名类的所有对象都使用doAction()从Action类继承的doAction(Word w1, Word w2)方法,而不是您错误地认为已覆盖原始方法的方法.
提示:当您覆盖某些方法时,请确保方法签名保持一致.一个例外是重写方法可能具有重写方法的子类型的返回类型.
| 归档时间: |
|
| 查看次数: |
6645 次 |
| 最近记录: |