使用方法创建一个超类

时间:2014-05-25 01:57:47

标签: java subclass lwjgl superclass

我想知道我是否可以完成我的工作 smarter 。我有2个班级:

敌人类(任何敌人的超类):

package com.joetannoury.game.entity.enemy;

/**
 * Enemy's superclass!
 *
 * @author Joe Tannoury
 */
public abstract class Enemy {

    public Enemy(int EnemyID, float x, float y) {

    }

    public abstract void update(int delta);
    public abstract void render();
}

敌人类(敌人的子类):

package com.joetannoury.game.entity.enemy;

import java.util.ArrayList;

/**
 * This is an subclass of Enemy!
 *
 * @author Joe Tannoury
 */
public class E0 extends Enemy {

    private ArrayList<Float> x = new ArrayList<>();
    private ArrayList<Float> y = new ArrayList<>();

    private ArrayList<Float> rotation = new ArrayList<>();

    private boolean firstEnemy = false;

    public E0(float x, float y) {
        super(0, x, y);

        this.x.add(x);
        this.y.add(y);

        this.rotation.add(0.0f);
    }


    @Override
    public void update(int delta) {
        if(firstEnemy) {

            for(int i =  0; i > x.size(); i++) {



            }

        }
    }

    @Override
    public void render() {
        if(firstEnemy) {

            for(int i =  0; i > x.size(); i++) {



            }

        }
    }
}

所以,我的问题是,我可以在超类中做一些事情,所以我不需要在子类中一次又一次地设置for()循环吗?我真的不明白抽象类的含义,所以如果你认为它不应该是你可以这么好并告诉我为什么? :d

无论如何,谢谢你。

1 个答案:

答案 0 :(得分:1)

根据您在这些循环体内所做的事情的性质,您可能会使用Template Method设计模式。我们的想法是将循环放在基类中的方法中,并引入一个不同的abstract方法来执行循环的单个步骤,如下所示:

public abstract class Enemy {
    ...
    public void render() {
        if(firstEnemy) {
            for(int i =  0; i > x.size(); i++) {
                doRender(i);
            }
        }
    }
    public abstract void doRender(int i);
}

public class E0 extends Enemy {
    ...
    public abstract void doRender(int i) {
        ... // Do the work for a single step of the loop in E0
    }
}
public class E1 extends Enemy {
    ...
    public abstract void doRender(int i) {
        ... // Do the work for a single step of the loop in E1
    }
}
... // And so on