有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java制作一个包含方法的超类

我想知道我是否能让我的作品更智能。我有两门课:

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

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) 个答案

  1. # 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