第6天
1.static final 常量:
1)必须声明同时初始化
2)由类名点来访问,不能被改变
3)建议:常量名所有字母都大写,多个单词用_分隔
4)编译器在编译时将常量直接替换为具体的值,效率高
5)何时用:数据永远不变(经常要改的或重新赋值的就不能用常量)、并且经常使用(只用一次或两三次就没必要用常量)
2.抽象方法:------保证向上造型的时候能够去调用父类中的抽象方法,然后去访问在子类中重写抽象方法过后的方法
而向上造型的意义就是把子类数组统一到一个父类数组中
1)由abstract修饰
2)只有方法的定义,没有具体的实现(连{}都没有)
3.抽象类:
1)由abstract修饰
2)包含抽象方法的类必须是抽象类
3)抽象类中抽象方法没有方法体,所以是不完整的,因此不能被实例化---new的过程就是在实例化,也就是不能new对应类的对象
4)抽象类是需要被继承的(final不能被继承,abstract不被继承没有意义---所以final和abstract不能同时修饰),派生类:
4.1)在派生类中重写抽象方法-----变不完整为完整,也就是说只要继承了抽象类就要重写抽象方法(强制子类必须重写,达到统一的效果)
4.2)也声明为抽象类-----但声明过后的抽象类既不能new对象又是不完整的/需要被继承,一般不这么用
5)抽象类的意义:
5.1)封装派生类共有的属性和行为-------代码复用
5.2)为所有派生类提供统一的类型------向上造型
5.3)可以包含抽象方法,为所有派生类提供统一的入口(能够在向上造型的时候点出来)
派生类的具体实现不同,但入口是一致的
例如:
private FlyingObject[] enemies= {};
enemies=new FlyingObject[5];
enemies[0]=new Airplane();//向上造型,小敌机为飞行物类
enemies[i].step();---.step()为统一的入口
Shoot射击游戏第一天:
1.创建了6个对象类,并创建World类测试
Shoot射击游戏第二天:
1.给6个对象类添加构造方法,并测试
Shoot射击游戏第三天:
1.设计小敌机数组、大敌机数组、小蜜蜂数组、子弹数组,并测试
2.设计FlyingObject超类,6个对象类继承超类
3.在FlyingObject超类中设计构造方法
Shoot射击游戏第四天:
1.将小敌机、大敌机、小蜜蜂数组合为FlyingObject数组,并测试
2.在6个派生类重写FlyingObject类的step()
3.画窗口
Shoot射击游戏第五天:
1.给类中成员添加访问控制修饰符
2.给6个对象类准备图片属性
Shoot射击游戏第六天:
1.设计窗口的宽和高为常量,适当地方做修改
2.画对象:
1)想画对象需要获取对象的图片,每个对象都得得图片,
说明获取图片为共有行为,所以设计在FlyingObject超类中,每个对象获取图片的行为都不一样,所以设计为抽象方法
---在FlyingObject中设计抽象方法getImage()获取对象的图片
2)获取图片时需要考虑对象状态,因为不同状态下获取的图片是不同的,
所有对象都有状态,所以状态需要设计在FlyingObject超类中,状态一般都设计为常量,state变量当前状态
---在FlyingObject超类中设计LIFE、DEAD、REMOVE常量,state变量
获取图片时需要判断对象的状态,每个对象都得判断状态,所以将判断状态行为设计在FlyingObject超类中,
每个对象判断状态的行为都是一样的,所以设计为普通方法
---在FlyingObject超类中设计isLife()、isDead()、isRemove()
3)重写getImage()获取对象图片
3.1)天空Sky,返回image即可
3.2)子弹Bullet:
3.2.1)若活着的,返回image即可
3.2.2)若死了的,则删除
3.3)英雄机Hero:
3.3.1)若活着的,返回images[0]和images[1]来回切换
3.4)小敌机Airplane:
3.4.1)若活着的,返回images[0]即可
3.4.2)若死了的,返回images[1]到images[4]轮换,4后则删除
3.5)大敌机BigAirplane:
3.5.1)若活着的,返回images[0]即可
3.5.2)若死了的,返回images[1]到images[4]轮换,4后则删除
3.6)小蜜蜂Bee:
3.6.1)若活着的,返回images[0]即可
3.6.2)若死了的,返回images[1]到images[4]轮换,4后则删除
4)前3步获取了对象的图片,则可以开画了,每个对象都能画,
所以画对象的行为为共有的行为,所以设计在FlyingObject超类中,
每个对象画的行为都是一样的,所以设计为普通方法
---在FlyingObject中设计paintObject()画对象
5)因为天空需要画两张图,所以在Sky中重写画对象
在Sky中重写paintObject()画对象
6)在World类中重写paint(),调用对象的paintObject()
* 补充内容:
设计规则:
1)将所有派生类所共有的属性和行为,抽到超类中------抽共性
2)所有派生类的行为都一样,设计成普通方法
所有派生类的行为都不一样,设计成抽象方法
3)下次再讲
项目:
1.常量后
2.画对象
窗口的宽和高(400和700)永远不变而且经常使用,所以把它们设置成常量(在主窗口World类中)
都小写--包
首字母大写---类
首字母小写----变量/对象
都大写----常量
斜的-----静态的
构造方法缺一个要素---返回值类型,连void都没有
抽象方法缺一个要素---方法体,连大括号{}都没有