如果我有一个扩展JButton并实现ActionListener的A类,它会执行某个默认操作。然后我有B类扩展A类,我希望它做同样的动作,加上其他东西。如何扩展A类的actionPerformed方法?
A类:
class AButton extends JButton implements ActionListener {
AButton () {
addActionListener(this);
}
@Override
public void actionPerformed (ActionEvent aEvent) {
methodA();
}
}
B组:
class BButton extends AButton {
BButton () {
super();
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent aEvent) {
methodB();
}
});
}
}
答案 0 :(得分:2)
您可以覆盖methodA()而不是actionPerformed()调用
protected void methodA() {
super.methodA();
//additional actions here
}
答案 1 :(得分:1)
我希望它能够做同样的动作,加上别的东西。
您可以在同一个ActionListener
上添加多个JButton
,并且在点击按钮时会触发所有class AButton extends JButton implements ActionListener {
AButton () {
addActionListener(this);
}
@Override
public void actionPerformed (ActionEvent aEvent) {
methodA();
methodB();
}
public void methodB(){
// nothing here, no code
// you can make this method abstract if needed
}
}
class BButton extends AButton {
@Override
public void methodB(){
// add more code here specific to this class
}
}
,但要确保侦听器的顺序不是预定义的,不应该是。
除非您需要覆盖现有功能,否则永远不要扩展任何内置类。
详细了解Favor Composition over inheritance Principle
如果你想以同样的方式做,那么试试这样的事情:
{{1}}
答案 2 :(得分:0)
我认为这是不可能的。您不能继承匿名类。您应该编写一个实现ActionListener的动作处理程序,然后从第二个类的处理程序扩展。