飞机大战编写以及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. 关于子类中方法重写之后的调用问题:就这么想,重写的目的是什么呢?当然是为了不同的对象有不同的方法呀,如果说子类重写了父类方法,但是任然调用父类方法,那就一点用都没有了啊,所以,不管怎样,只要引用调用的方法是子类重写了的方法,就会调用子类方法。除去重写方法,其他数据就得看引用类型,一个子类对象被造型成父类对象(或其实现的接口)后,引用能访问的方法是不是就减少了啊,因为此时是需要看父类有什么了。

时间: 2024-10-17 13:02:39

飞机大战编写以及Java的面向对象总结的相关文章

飞机大战完结篇

语言都有自己特定的环境 每种语言都有自己特定的环境,这是学习新语言最开始的难题吧,为了解决这个问题,应该是每个语言都会有集成的软件.方便初学者学习.但当自己做项目的时候肯定要导入第三方包.这时候就得到官网下载了. 飞机大战用到第三包,所谓环境的东西.每一种语言都有自己的环境,当自己使用的是集成软件时候,语言所涉及到的包,不可能都会有.自由内置的才会有,才会自带这些环境包.不会的应该百度,然后去寻找 答案. 飞机大战用的第三方包是pygame,上官网下载 bitbucket.org/pygame/

java之线程飞机大战制作

import java.awt.Graphics; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JPanel; public class PlaneMain extends JPanel { public static void main(String[] args) { new PlaneMain(); } private ArrayList<View> list; public Plan

Java飞机大战源代码

刚学不久java,做了一个飞机大战的小小小小游戏,现在把这个思路总结以及代码分享出来.大佬别吐槽(emmmmmm .....开发环境:jdk1.7 开发工具:eclipese PlanelJPanel.java 1 package project02; 2 3 import java.awt.BasicStroke; 4 import java.awt.Color; 5 import java.awt.Cursor; 6 import java.awt.Font; 7 import java.a

Java基础——面向对象练习题

1.建立一个图形接口,声明一个面积函数.计算圆形和矩形的面积.注:体现面向对象的特征,对象值进行判断,用异常处理.不合法的数值需要出现"这个数值是非法的提示",不再进行运算. 2.在一个类中编写一个方法,这个方法搜索一个字符数组是否存在某个字符.如果存在则返回这个字符在数组中第一次出现的位置,否则返回-1.需要搜索的字符数组和字符都一参数的形式传递给该方法.如果传入的数组为NULL,则应该抛出IllegalArgumentException异常. 3.补充compare函数代码. 4.

飞机大战

这几天都在做飞机大战的小游戏,巩固了一些基础知识,还更加熟练地运用了面向对象的一些东西.之前的一些难点,也在这几天中得到了解决. 还学会了一个新知识: function sortNumber(a,b) { return b - a}key = key.sort(sortNumber);将数据从大到小排列.

web版canvas做飞机大战游戏 总结

唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的.说是用html5做,发现全都是js.说js里一切皆为对象,写的最多的还是函数,都是函数调用.对这两天的代码做个总结,希望路过的大神指点一下,我对这个游戏的思路,可改进优化的代码. 先说一下游戏的基本内容: 打飞机(不要想歪了),有鼠标控制移动英雄机,子弹自动射击:敌机从上而下,有三种敌机: 先说下HTML代码(主要就是这一行): <canvas id="canFly" width="480" heig

用Swift语言和Sprite Kit复制微信飞机大战游戏

先上GitHub链接: https://github.com/songrotek/PlaneWar.git 接下来稍微讲解一下! 这个程序还有点Bug,见谅! 1 说明 游戏采用了Sprite kit最新的Per pixel for physic 技术,就是直接使用texture纹理作为sprite的physics body . 游戏的texture.atlas从别的打飞机项目中拷之并辛苦地分解了. 游戏编写借鉴了网上的objc代码! 2 游戏编写过程 添加背景-> 添加控制的飞机-> 添加发

python开发飞机大战

1.使用pygame包,使用Python3.5版本2.达到的效果是: 出现一个窗口,显示一张背景图片,出现一架敌机和一架自己的飞机 敌机在最上面,左右移动,随机发子弹,自己的飞机使用键盘左右键左右移动,使用空格键发子弹 当自己的飞机发出的子弹碰到敌机发出的子弹时,敌机的子弹消失 当自己的飞机发出的子弹碰到敌机时,敌机原地摧毁后,再次出现开始游戏 当敌机发出的子弹碰到自己的飞机时,飞机原地摧毁,并退出游戏 3.主要涉及,飞机运动,子弹检测,子弹碰撞检测等,使用面向对象的思路 import pyga

JAVA的面向对象编程--------课堂笔记

JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.   为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参