1

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

4

3 回答 3

6

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

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

于 2012-10-09T03:35:41.697 回答
5

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

在抽象类的情况下不正确。只有具体的类应该为它扩展的超类(将是抽象的)中的所有抽象方法以及它实现的接口中的所有方法提供实现。

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

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

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

于 2012-10-09T03:34:10.733 回答
1

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

将类抽象化的代价是它不能被直接实例化。也就是说,必须扩展抽象类才能使用。

于 2012-10-09T03:38:15.360 回答