我很难理解为什么一个类中的动作是抽象的而另一个类中的动作却不是抽象的。
源代码1:(编译时出错:https :
//gyazo.com/cd3c21a8562589451814903febaf89fe)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Play extends JFrame{
Engine drawPanel = new Engine();
private int x = 0;
private int y = 0;
public int getX(){
return x;
}
public int getY(){
return y;
}
public Play(){
Action rightAction = new AbstractAction(){
public void actionPreformed(ActionEvent e){
x+=10;
drawPanel.repaint();
}
};
Action leftAction = new AbstractAction(){
public void actionPreformed(ActionEvent e){
x-=10;
drawPanel.repaint();
}
};
InputMap inputMap = drawPanel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = drawPanel.getActionMap();
inputMap.put(KeyStroke.getKeyStroke("RIGHT"), "rightAction");
actionMap.put("rightAction", rightAction);
inputMap.put(KeyStroke.getKeyStroke("LEFT"), "leftAction");
actionMap.put("leftAction", leftAction);
add(drawPanel);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(640, 480);
setTitle("Game");
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new Play();
}
});
}
}
源代码2 :(编译好的代码)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyBidings extends JFrame {
int x = 0;
int y = 0;
DrawPanel drawPanel = new DrawPanel();
public KeyBidings(){
Action rightAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
x +=10;
drawPanel.repaint();
}
};
InputMap inputMap = drawPanel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = drawPanel.getActionMap();
inputMap.put(KeyStroke.getKeyStroke("RIGHT"), "rightAction");
actionMap.put("rightAction", rightAction);
add(drawPanel);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
private class DrawPanel extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.GREEN);
g.fillRect(x, y, 50, 50);
}
public Dimension getPreferredSize() {
return new Dimension(400, 200);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
new KeyBidings();
}
});
}
}
因为在第一个示例中您输入错误:
actionPreformed
应该是
actionPerformed
问题内容: 为什么Object类是Java中em的基类,而不是抽象类? 我已经有很长时间了,这个问题纯粹是出于好奇,仅此而已。我的代码或任何人的代码都没有中断,因为它不是抽象的,但是我想知道为什么他们将其具体化了? 为什么有人要这个Object类的“实例”(而不是引用的存在)?一种情况是糟糕的同步代码,该代码使用对象的实例进行锁定(至少我曾经以这种方式使用过一次……我的错)。 对象类的“实例”是否
问题内容: 为什么Java类不能像抽象类那样具有抽象字段? 例如:我有两个扩展相同抽象基类的类。这两个类各自具有相同的方法,但其中包含String常数(恰好是错误消息)。如果字段可以是抽象的,那么我可以使这个常量抽象,并将该方法引入基类。相反,我必须创建一个抽象方法,在这种情况下称为该方法,该方法返回String,在两个派生类中重写此方法,然后可以拉出该方法(现在称为抽象方法)。 为什么我不能仅将
问题内容: 为什么将类实现为常规类而不是将 抽象方法实现为 抽象 类。 会不会带来任何问题?或以这种方式有什么用吗? 而且,该方法应该是一种非常特定的方法, 其功能不能由任何其他类实现 (如果我没记错的话)。因此,我想该关键字比其他任何方法都更适合此操作。 但是我可以重写此方法并根据需要使用它, 它显然只印了, 有人告诉你我会产生一个新线程吗? 除了使工程师取代您感到困惑之外,还有什么其他用途?
我正在使用一个3d party库,它们返回缺少类型规范的集合(例如,
问题内容: 我们的代码库中有几个空的抽象类。我觉得很丑。但是除了这个非常愚蠢的原因(丑陋)之外,我是否应该将其重构(例如,插入空接口)? 否则,代码将很健壮并经过良好测试。因此,如果仅出于“审美”原因,我将通过并保留空的抽象类。 你怎么看? 编辑: 1)“空抽象类”的意思是: 2)“空”的原因:休眠。我根本不掌握这个持久性框架。我只知道不能将接口映射到表,并且由于这个技术原因,类比接口更受欢迎。
问题内容: 我得到了几种解释,但是到目前为止,我还无法理解Java中的抽象类和方法是什么。 有人说它必须与程序的安全性做些关系,另一些人说不是那样。 即使从Dietel&Dietel的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),