Shoot射击游戏第四天:
1)将小敌机数组、大敌机数组、小蜜蜂数组组合为FlyingObject数组,并测试
2)在6个对象类中重写step()方法
3)画窗口:-----在World类中
3.1)import JFrame+JPanel
3.2)设计World类继承JPanel
3.3)将main中代码Ctrl C+V过来
3.4)将frame.setSize()括号中改为400,700
下载我之前上传的文件修改,或者直接复制我写好的.
画窗口-----swing相关的内容(现在swing已经被淘汰了)
-----射击游戏中与swing窗口相关的内容统统不要求掌握
1.向上造型:
1)超类型的引用指向派生类的对象
2)能点出来什么,看引用的类型-------这是规定,不需要理解
超类 派生类
FlyingObject o1 = new Airplane();
FlyingObject o2 = new BigAirplane();
FlyingObject o3 = new Bee();
FlyingObject o4 = new Hero();
FlyingObject o5 = new Sky();
FlyingObject o6 = new Bullet(100,200);
o1/o2/o3/o4/o5/o6. 只能点出FlyingObject中的
超类 派生类
Person p1 = new Student();
Person p2 = new Teacher();
Person p3 = new Doctor();
p1/p2/p3. 只能点出Person中的
超类 派生类
Animal o = new Tiger();
o. 只能点出Animal中的
//动物是动物
Animal o = new Animal();
//老虎是老虎
Tiger o = new Tiger();
//老虎是动物
Animal o = new Tiger();
//动物是老虎----语义不通
Tiger o = new Animal(); //编译错误
class Animal{ //动物类
}
class Tiger extends Animal{ //老虎类
}
2.方法的重写(Override):重新写、覆盖
1)发生在父子类中,方法名相同,参数列表相同,方法体不同
2)重写方法被调用时,看对象的类型---这是规定,不需要理解
3)重写遵循"两同两小一大"原则:-----------了解
3.1)两同:
3.1.1)方法名相同
3.1.2)参数列表相同
3.2)两小:
3.2.1)派生类方法的返回值类型小于或等于超类方法的
1)void时,必须相同
2)基本类型时,必须相同
3)引用类型时,小于或等于
3.2.2)派生类方法抛出的异常小于或等于超类方法的-----API时讲
3.3)一大:
3.3.1)派生类方法的访问权限大于或等于超类方法的
3.重写与重载的区别:-----(面试题,回答时只答1.1和2.1)
1)重写:
1.1)发生在父子类中,方法名相同,参数列表相同,方法体不同
1.2)遵循"运行期绑定",看对象的类型来调用方法
2)重载:
2.1)发生在同一类中,方法名相同,参数列表不同,方法体不同
2.2)遵循"编译期绑定",看参数/引用的类型来绑定方法
今天的代码比较简单只改变了World的内容而且不需要大家记忆复制就行
在写代码前大家要做的是把图放到我们的包里面,不要放到外面就得不到图形了
图可以在我上传的资源里面获得(可以先把下载文件导入到eclipse中在复制粘贴图片)
package cn;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class World extends JPanel {
private Hero hero = new Hero();
private Sky sky = new Sky();
private FlyingObject[] enemies;// 0
private Bullet[] bullet = {};
public void action() {
BufferedImage img = Images.sky;
enemies = new FlyingObject[5];
enemies[0] = new Airplane();
enemies[1] = new Airplane();
enemies[2] = new BigAirplane();
enemies[3] = new BigAirplane();
enemies[4] = new Bee();
for (int x = 0; x < enemies.length; x++) {
FlyingObject f = enemies[x];
System.out.println(f.x + "," + f.y);
f.say();
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
World world = new World();
frame.add(world);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 700);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
world.action();
}
}
大家可以得到这样一个图