2012-10-09 54 views
1

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

回答

6

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

现在这些是规则,但AbstractAction实现actionPerformed()是没有意义的,因为它不可能提供有用的实现。每个子类都必须重写它的定义,这使得它成为抽象标记的理想选择。

5

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

不是真的在抽象类的情况。只有具体类应该为超类中的所有抽象方法(它将是抽象的)提供实现,并且实现它所实现的接口中的所有方法。

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

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

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

1

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

制作类抽象所付出的代价是它可能不会被直接实例化。也就是说,抽象类必须扩展才能使用。

相关问题