当我尝试在Java中调用名为“ShowHistory”的类时,出现错误:“ShowHistory类型必须实现继承的抽象方法ActionListener.actionPerformed(ActionEvent)”
这是我的代码:
public class ShowHistory extends JFrame implements ActionListener {
...
}
IDE建议我让这个类成为一个抽象类,但是当我将它转换为抽象类时,另一段代码出错了:
ShowHistory frame = new ShowHistory();
它显示:“无法实例化ShowHistory类型”。
有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
当一个类implements
是一个接口时,它需要为每个接口的方法提供一个实现。
此处,相关界面为ActionListener
。它包含一个方法actionPerformed(ActionEvent)
。
您的班级ShowHistory
需要为此方法提供实施:
public void actionPerformed(ActionEvent e) { ... }
错误消息告诉您当前该类不执行此操作。
答案 1 :(得分:1)
ShowHistory类型必须实现继承的抽象方法ActionListener.actionPerformed(ActionEvent)
这意味着您的类ShowHistory
要实现ActionListener
,它必须实现接口定义的所有方法。在这种情况下,这就是方法actionPerformed(ActionEvent)
。
public void actionPerformed(ActionEvent e) { ... }
当您将ShowHistory
更改为abstract
时,您已将其设置为无法实例化ShowHistory,并且它的子类(可以实例化,如果不是抽象的话)将负责定义ActionListener
中的方法。
答案 2 :(得分:0)
您无法实例化抽象类。
然后,对于第一条错误消息,您只需要在类中实现方法actionPerformed
,以便它覆盖ActionListener接口中的方法。当类实现接口时,它必须实现接口包含的每个方法。
正如您在documentation中看到的那样,ActionListener
只有一种方法,actionPerformed
,您需要实施。
答案 3 :(得分:0)
您无法实例化抽象类:这是abstract
的定义!
然而,您可以实例化子类,可能是匿名类。例如:
ShowHistory frame = new ShowHistory() {
// Add methods you might need to implement here
};
答案 4 :(得分:0)
当你实现任何接口或扩展任何类时,你必须实现接口或抽象类扩展中定义的所有方法。
如果你想要专门的类(在同一层次结构中较低)来提供实现,你可以使你的类抽象(如ide所建议的那样),但在这种情况下你将无法创建这个对象class,您将需要创建提供实现的新类的对象