什么是多态
多态字面意思即为多种状态,具体在代码中体现在抽象类的出现:在飞机大战中,有敌机类,有友机类,有炮弹类,有子弹类,如果为他们分别写各自的运行规则会导致代码冗余——因为他们有某些共同的特点,代码会重复。这时如果写一个mover接口,再用上述类继承实现这个接口,会使代码更精简。
如何实现
接口
1.找出接口中要定义的规范是什么
在上述类中,他们的共同点是移动特征和画图特征
2.接口的书写规范
①首字母大写I
②方法后面接分号
public interface IMover {
public void move();
public void draw(Graphics g);
}
实现接口的类
将接口中的方法实现
public class Plane1 implements IMover {
Graphics g;
Random ran=new Random();
int x=850;int y=ran.nextInt(800);
public Plane1(Graphics g) {
this.g=g;
}
public void move() {
x--;
}
public void draw(Graphics g) {
g.drawOval(x, y, 20, 20);
System.out.println("y="+y);
}
}
将创建的mover都加入队列中
int x=e.getX(); int y=e.getY();
if(count==0){
// System.out.println("c="+count);
Plane p=new Plane(x,y,g);
movers.add(p);
count++;
}else{
// System.out.println("c="+count);
Plane1 p1=new Plane1(g);
movers.add(p1);
count=0;
}
注:存入队列的不是同一个类的,取出时也不确定是不是同一个类的,正是由于从队列中取出时不确定取出的是什么才出现“多态”
取出队列
for(int i=0;i<movers.size();i++) {
IMover im=movers.get(i);
// System.out.println("i="+i);
im.move();
im.draw(g);//取出时的对象调用方法
}