跟着王洋老师学编程 - 1.7 键盘控制小球

发布时间 2023-12-28 17:26:02作者: Shannon_Zhang

一 、 抽象方法/类 和 接口的定义

  • 抽象方法 - 无法清晰描述的方法,比如动物类的吃方法;
  • 抽象类 - 如果一个类中含有抽象方法,那这个类也必须要定义成抽象类;
  • 接口 - 如果一个类中只有抽象方法,没有属性,这就是一个纯抽象类,即接口。
1 abstract class Animal{  // 抽象类
2   public abstract void eat();  // 抽象方法        
3 }
1 interface Animal{  // 接口
2   public void eat();  // 不再需要写abstract 标识
3 }

 

二、键盘控制小球的实现

根据老师的讲解,开发思路如下:

  - 实例化一个窗体

  - 定义画布类——继承画布类、实现键盘监听接口,重写键盘监听接口的三个抽象方法

  - 实例化一个画布,将画布添加到窗体,并注册监听键盘事件

 代码一

【运行结果】编译失败

【原因分析】错误提示已经很明确,keyCode属性不能直接通过对象访问,很可能是个私有属性,查API文档,得知获取keyCode的方法

代码二

 1 import java.awt.*;
 2 import java.awt.event.*;
 3 
 4 public class KeyBall{
 5     public static void main(String args[]){
 6         Frame w = new Frame();
 7         w.setSize(400,300);
 8 
 9         KeyBallPanel kbp = new KeyBallPanel();
10         w.add(kbp);
11 
12         // 注册事件,double confirm
13         //w.addKeyListener(kbp);
14         kbp.addKeyListener(kbp);
15 
16         w.setVisible(true);
17     }
18 }
19 
20 class KeyBallPanel extends Panel implements KeyListener{
21     int x = (int)(Math.random()*400);
22     int y = (int)(Math.random()*300);
23     public void paint(Graphics g){
24         g.setColor(Color.red);
25         //System.out.println(x+" "+y);
26         g.fillOval(x,y,10,10);
27     }
28     @Override
29     public void keyPressed(KeyEvent ke){
30         //System.out.println(ke);
31         int kc = ke.getKeyCode();
32         System.out.println(kc);
33         switch(kc){
34             case 38:y--;break;
35             case 40:y++;break;
36             case 37:x--;break;
37             case 39:x++;
38         }
39         repaint();
40     }
41     @Override
42     public void keyReleased(KeyEvent ke){
43         //System.out.println(ke);
44 
45     }
46     @Override
47     public void keyTyped(KeyEvent ke){
48         //System.out.println(ke);
49     }
50 }

【运行结果】完美实现键盘控制小球~~~^_^