终于在开发中用到自己的继承了、多态了

来源:互联网 发布:淘宝打假部门联系方式 编辑:程序博客网 时间:2024/05/16 23:48

* 关于继承、多态,我想学过java的人都熟悉,来跟着我回忆一下面向对象的三大特性:封装、继承、多态。但是我们以前学的主要就是什么叫做继承,以及我们怎么去写一个继承,在java里面用extends,在c++里面用:,但是我们学完后可能只是会写了,但是发现病没用怎么用的到,尤其在刚开始做开发的时候,我们有时候即使需要用继承,但我们也不知道怎么去用。在这里我就以我的一个例子来说一下继承在开发中的使用。


前一段时间我在学习写贪吃蛇,在写贪吃蛇游戏的时候,我几乎没用到半点的继承,我也非常的想用,但是不知道到底应该在什么时候用,或者不知道怎么去使用,所以我记得我在写贪吃蛇游戏中的砖块以及苹果,还有边界的时候我虽然想用继承在里面(因为这三者都只是一个颜色块),但是最后写完了却发现还是用的if-else判断的,这样大大的降低了代码的可读性 – 例如我在主界面要画出来这三样东西,我以前的做法是:

{ List<Edg> edg;//边界 edg.add(...); List<Block> block;//砖块 block.add(); List<Apple> apple;//苹果 //然后分别调用draw方法画出 for{ block.draw(); } .. ..}

这样写虽然能够去实现功能,但是这样的实现方法无疑是麻烦的,并且增加了代码的冗余。我也是后来觉得这样写不好,所以我就更改了策略,便把这些都集成于一个ColorBlock类,这样的话大家只需要去重写有关draw方法就行了。

实现大概如下

class ColorBlock {  draw();//省略写法,但要抽象,因为要多态}class Block extends ColorBlock{  darw(){};//Block的draw的实现}class Apple extends ColorBlock{  darw(){};//Apple的draw的实现}....

经过这样的定义后我们在画的时候就简单了

List<ColorBlock> cblock;cblock.add(new Block());cblock.add(new Apple());for(){  cblock.draw();}

虽然这样写看着有些麻烦,但是其实用起来相当的舒服,以后要想加入新的元素,就只需要将其继承ColorBlock,然后加到那个List里面就ok了,岂不是爽哉,增加了扩展性,也使代码看起来有条理。


上面就是我在这个案例里面关于继承和多态使用的一点总结,总的就是说把同种类型的东西抽象出一个父类或者接口,并在其中增加抽象方法,然后子类实现那些方法,这样的话在使用的时候只需要用父类来指向子类对象,剩下的java帮你做了,你不需要去判断他是一个Apple或者Block,java帮你做了。