为什么AbstractAction没有实现actionPerformed()?

时间:2012-10-09 03:29:23

标签: java awt actionlistener abstract-action

AbstractAction实现了接口Action,但在Action中,有一个方法actionPerformed(ActionEvent e)继承自接口ActionListener
我知道该类实现的接口必须提供该接口的所有方法实现
但是我发现actionPerformed(ActionEvent e)中没有AbstractAction的实现,为什么?

3 个答案:

答案 0 :(得分:6)

AbstractAction是一个抽象类,因此它不必实现接口上的所有方法。抽象类无法实例化,因此在不创建它的子类的情况下不能使用它们。只有具体的类(即非抽象类)必须提供接口的所有方法的实现。如果你继承AbstractAction,你的子类必须实现actionPerformed(),否则它也必须是抽象的。

现在这些是规则,但是AbstractAction实现actionPerformed()没有意义,因为它无法提供有用的实现。每个子类都必须覆盖它的定义,这使得它成为被标记为抽象的良好候选者。

答案 1 :(得分:5)

  

我知道类实现接口必须提供该接口中所有方法的实现

在抽象类的情况下不正确。只有具体的类才能为超类中的所有抽象方法(它们都是抽象的)提供实现,并扩展它实现的接口中的所有方法。

  

但我发现AbstractAction中没有actionPerformed(ActionEvent e)的实现,为什么?

他们希望在该类中保持抽象,以确保扩展此类的任何具体内容都为该方法提供了实现。

此外,它会执行什么默认操作(可能是空的或什么都没有)?

答案 2 :(得分:1)

允许abstract类不完整。抽象类不需要实现接口或父抽象类指定的任何或所有方法。另外,抽象类可以声明任何子类必须实现的新抽象方法。

为使类抽象而支付的价格是它可能无法直接实例化。也就是说,必须扩展一个抽象类以供使用。