首页 > 代码库 > 飞机大战编写以及Java的面向对象总结
飞机大战编写以及Java的面向对象总结
面向对象课程完结即可编写一个简单的飞机大战程序。我觉得我需要总结一下
飞机大战中类的设计:
- 父类:FlyingObject(抽象类)
- 接口:Award 、Enemy
- 子类:Hero、Bullet、Airplane (实现Enemy接口)、 Bee (实现Award接口)
- 运行类:ShootGame
Hero、Bullet、Airplane 、 Bee 均继承自FlyingObject类,FLyingObject具有他们的公共属性以及行为,因为FlyingObject并不需要被实例化,那么大可以将之设计为抽象类。
Award、Enemy是两个接口,分别表示奖励和敌人,Award中定义了奖励类型常量和获取奖励方法,Enemy定义了获取敌机含有的分数方法。Bee、Airp继承了FlyingObject类的同时分别实现了Award、Enemy接口,让他们继承父类的同时也具有了接口中的属性方法。接口的设计提高了程序的扩展性,如果说还想添加一个大黄蜂(BigBee)类,既可以获得奖励又能获得分数,这个类继承FlyingObject在实现Award和Enemy接口即可。一个类是能继承一个父类,但可以实现多个接口,接口让程序的扩展性大大提升。是不是顿时觉得接口萌萌哒,特别好用呢。
ShootGame则是应用程序具体逻辑的实现,定义了舞台界面的属性、方法。其实质是数据的使用层,之前的几个类都是数据基础,这个类则是将数据组装。额,希望我的理解没有问题。
一个好的应用程序必定有一个好的设计,继需求分析阶段后,类和数据结构的设计同样是一个非常重要的阶段,在几次的项目实践中,我大概已经领悟到了这一点。没有好的设计,往后的路只有一个字——苦...哇!
至于类的设计原则:首先找出所有对象共有的属性和方法,设计出父类,至于父类是设计成抽象类还是非抽象类就看程序需不需要将他实例化对象。然后看每个类是不是还具有除父类以外的其他共有方法功能,将其抽象为接口。其次是类的方法,方法的设计尽量降低其耦合性,说白了就是把每一个功能拆开拆开,分解分解。
关于面向对象:
面向对象是什么?面向对象就是将客观事物看做具有状态和行为的对象,通过抽象找出同一类对象的共同状态和行为,构成模型——类(组成Java程序的最小单位)。
面向对象具有如下基本特征:
- 抽象和封装。抽象的结果就是形成类,类中的数据和方法是受保护的,可以根据需要设置不同的访问控制属性,从而实现了数据的封装,保证了数据的安全性,隐藏了方法的实现细节,也方便了使用。
- 继承。可以对已有类增加属性和功能,或进行部分修改来建立新的类,实现了代码的重用。
- 多态。
- 同一个消息被不同的对象接收(即同一类型的引用指向不同对象)时可以导致不同的行为。---行为多态
- 同一对象被造型成不同类型后可以具有不同的功能。---对象多态
面向对象中的易错点总结:
1. 关于static :
- static修饰变量:那么该变量就是属于类的,存在方法区中,只有一份(所有对象共享),通过类名打点访问。
- static修饰方法:存在方法区中,只有一份。因为没有隐式的this传递,所以在静态方法中不能直接访问实例变量以及非静态方法。
- static块:在类被加载期间自动执行,因为类只被加载一次,所以静态块也只会执行一次。常常用于加载(初始化)静态资源如图片、音频、视频等。
2. 关于子类中方法重写之后的调用问题:就这么想,重写的目的是什么呢?当然是为了不同的对象有不同的方法呀,如果说子类重写了父类方法,但是任然调用父类方法,那就一点用都没有了啊,所以,不管怎样,只要引用调用的方法是子类重写了的方法,就会调用子类方法。除去重写方法,其他数据就得看引用类型,一个子类对象被造型成父类对象(或其实现的接口)后,引用能访问的方法是不是就减少了啊,因为此时是需要看父类有什么了。
飞机大战编写以及Java的面向对象总结