当前位置: 代码迷 >> J2SE >> 关于继承在实际应用中的疑问,该怎么解决
  详细解决方案

关于继承在实际应用中的疑问,该怎么解决

热度:89   发布时间:2016-04-24 01:16:49.0
关于继承在实际应用中的疑问
最近在写坦克大战小游戏,对继承的理解感觉还是不深刻。所以到此地取经,希望能得到一些指点。

大概是这样,有我的坦克,敌方坦克,友军坦克,我军子弹,敌军子弹这些东西

本开始我就写了坦克和子弹两个类,后来发现坦克和子弹的move方法,draw方法都可以复用,所以想把子弹和坦克只上加上moveable类,在类中定义x,y,team等共有的元素,并写好move方法。这样能省不少功夫。但是问题出在子弹和坦克的速度是不一样的,所以在move方法里没法体现了。本想将speed定义为常量的(安全,方便改),但是在moveable类做不到这一点,只能将其定义为变量,然后在构造函数里根据具体的对象给定速度。但这违背了我设计的初衷,我希望还是以常量的形式出现

同样的,draw方法内画圆的width和height也有类似问题,请问到底如何组织框架呢?

------解决方案--------------------
按照自己的想法写了点,希望对你有用
Java code
package com.test;public class Test {    public static void main(String[] args) {        GameItem gi1 = new Tank("我军坦克", 110);        GameItem gi2 = new Tank("敌军坦克", 120);        GameItem gi3 = new Tank("友军坦克", 130);        gi1.move();        gi2.move();        gi3.move();    }}abstract class GameItem{        public String type;    public int speed;     //等等一些共有的属性    public GameItem(){    }    //构造的时候初始化所有属性    public GameItem(String type, int speed) {        super();        this.type = type;        this.speed = speed;    }    public abstract void move();}class Tank extends GameItem{    public Tank(String type, int speed){        super(type, speed);    }    @Override    public void move() {        System.out.println("是" + type + "在移动,移动速度为:" + speed);    }}
  相关解决方案