"Cannot instantiate the Type Main"



每次创建一个类名为

的新对象时,我都会得到这个错误

"无法实例化类型Main"


这是代码:

import javax.swing.*;
import java.util.Scanner;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
public abstract class Main extends JPanel implements ActionListener, KeyListener{
Timer t = new Timer(5, this);
double x = 0, y = 0, velX = 0, velY = 0;
public Main() {
    t.start();
    addKeyListener(this);
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.fill(new Ellipse2D.Double(x, y, 40, 40));
    }
public void actionPerformed(ActionEvent e) {
    repaint();
    x += velX;
    y += velY;
    }
public void up() {
    velY = -1.5;
    velX = 0;
    }
public void down() {
    velY = -1.5;
    velX = 0;
    }
public void left() {
    velX = -1.5;
    velY = 0;
    }
public void right() {
    velX = -1.5;
    velY = 0;
    }
public void keyPressed(KeyEvent e) {
    int code = e.getKeyCode();
    if (code == KeyEvent.VK_UP) {
        up();
        }
    if (code == KeyEvent.VK_DOWN) {
        down();
    }
    if (code == KeyEvent.VK_LEFT) {
        left();
    }
    if (code == KeyEvent.VK_RIGHT) {
        right();
    }
    Main m = new Main();
    JFrame f = new JFrame();
    f.add(m);
    f.setVisible(true);;
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(800,600);
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}

这个对象总是得到"error"

Main m = new Main();

(我对制作UI非常非常陌生,事实上,这是我的第三个,所以我不知道为什么我不能实例化类型)

你不能在java中实例化抽象类,你的Main类是抽象的,使它成为一个具体的类,因为它似乎你有所有的功能主义者,没有必要声明它为抽象类。

public class Main extends JPanel implements ActionListener, KeyListener { } //abstract keyword removed

如果下列任何语句适用于您的情况,请考虑使用抽象类:

  • 你想在几个密切相关的类之间共享代码。
  • 您希望扩展抽象类的类有许多方法或字段,或需要访问修饰符以外的公共的(如受保护的和私有的)。
  • 你想声明非静态或非final字段。这使您能够定义可以访问和修改对象状态的方法

您的类Main是抽象的。不能实例化抽象类。

删除abstract关键字,并确保实现所有必要的方法

下一行就能解决你的问题

Main m = new Main(){};

代替

Main m = new Main();

相关内容

  • 没有找到相关文章

最新更新