如何使用Compile Error完美地运行java Program:class不是抽象的

时间:2015-04-24 08:55:29

标签: java

当我编译下面给出的代码时,它给出了一个错误说:

  

firstGUI不是抽象的,并且不会覆盖java.awt.event.ActionListener中的抽象方法actionPerformed(java.awt.event.ActionEvent)

这些是确切的词。

在初学者中,这是我的第一个使用Buttons和TextFields的程序。 任何帮助表示赞赏。

我使用BlueJ来运行我的程序。

 //program using Buttons and Textfields
 import java.awt.Graphics;
 import javax.swing.JFrame;
 import javax.swing.JButton;
 import javax.swing.*;
 import java.awt.event.ActionListener;
 import java.awt.event.*;

public class firstGUI extends JFrame implements ActionListener{
    int l;
    JTextField tf = new JTextField("0",10);
    JButton b1 = new JButton("Count");

      public firstGUI()
        {
          setTitle("Java Button");
          setVisible(true);
          setSize(600,600);
          SetDefaultCloseOperation(EXIT_ON_CLOSE);              
          tf.setEditable(false);
          b1.addActionListener(this);
          }

       public void main(String[] args)
       {
        firstGUI obj = new firstGUI();

          }
      @Override
      public void cal(ActionEvent e)
     { l++;
      tf.setText(l+"");}

     }
  }

4 个答案:

答案 0 :(得分:2)

您可能希望将方法public void cal(ActionEvent e)重命名为public void actionPerformed(ActionEvent e)。问题是找不到错误消息中指定的函数,因为您给它一个不同的名称。

编辑:有关抽象类和继承的更多信息,请阅读this

答案 1 :(得分:2)

当您想在类中实现某个界面时,如示例

public class firstGUI extends JFrame implements ActionListener{

您应该提供在已使用的接口和ActionListener中声明的方法的自己的方法实现:

@Override
public void actionPerformed( ActionEvent e )
{
    // your code
}

或者将您的方法public void cal(ActionEvent e)重命名为public void actionPerformed(ActionEvent e),以匹配合同格式ActionListener界面。

答案 2 :(得分:1)

为了将类用作具体类,如果要扩展抽象类或实现接口,则必须为所有抽象方法提供实现。如果在抽象类/接口中留下任何方法 - 该类将不被视为具体,需要标记为抽象。

错误明确提到您需要覆盖(提供实现)上述方法 - 只有在此之后您才能编译(并运行)您的代码。

答案 3 :(得分:0)

实现接口的任何具体(即非抽象)类都需要提供该接口指定的方法。由于您的类被声明为实现接口,但它没有提供所需的方法,因此无法实例化该类,因此需要声明abstract才能进行编译。

基本上,如果您的班级应该实施ActionListener,那么它应该有actionPerformed(ActionEvent)方法。