将Java类构造函数添加到ArrayList(扩展)

时间:2015-11-03 16:36:40

标签: java arraylist constructor

我不是很擅长英语,但我会试着解释一下我想要做什么 所以我在这里有这个类构造函数:

public class God {

public static ArrayList<God> gods = new ArrayList<God>();

private String name;
private PowerType powerType;
private AttackType attackType;
private ArrayList<ItemStack> abilities;
private Pantheon pantheon;
private GodClass godClass;
private List<Pro> pros;
private int favorCost;
private int gemCost;

public enum Pro {
    HIGH_SINGLE_TARGET_DAMAGE, HIGH_MOBILITY, HIGH_AREA_DAMAGE, HIGH_CROWD_CONTROL, HIGH_DEFENSE, HIGH_SUSTAIN, PUSHER, HIGH_ATTACK_SPEED, HIGH_MOVEMENT_SPEED, GREAT_JUNGLER, MEDIUM_CROWD_CONTROL,
}

public enum GodClass {
    ASSASSIN, GUARDIAN, HUNTER, MAGE, WARRIOR
}

public enum Pantheon {
    CHINESE, EGYPTIAN, GREEK, HINDU, MAYAN, NORSE, ROMAN
}

public enum PowerType {
    PHYSICAL, MAGICAL
}

public enum AttackType {
    MELEE, RANGED
}

private int health;
private int mana;
private int speed;
private int range;
private double attackSpeed;
private int damage;
private int physicalProtection;
private int magicalProtection;
private int hp5;
private int mp5;

public God(String name, PowerType powerType, AttackType attackType,
        ArrayList<ItemStack> abilities, Pantheon pantheon,
        GodClass godClass, List<Pro> pros, int favorCost, int gemCost,
        int health, int mana, int speed, int range, double attackSpeed,
        int damage, int physicalProtection, int magicalProtection, int hp5,
        int mp5) {
    this.name = name;
    this.powerType = powerType;
    this.attackType = attackType;
    this.abilities = abilities;
    this.pantheon = pantheon;
    this.godClass = godClass;
    this.pros = pros;
    this.favorCost = favorCost;
    this.gemCost = gemCost;
    this.health = health;
    this.mana = mana;
    this.speed = speed;
    this.range = range;
    this.attackSpeed = attackSpeed;
    this.damage = damage;
    this.physicalProtection = physicalProtection;
    this.magicalProtection = magicalProtection;
    this.hp5 = hp5;
    this.mp5 = mp5;
    gods.add(this);
}

现在没关系,对吧? 如果没有,请纠正我...
所以让我们假设这没关系,我创建了一些扩展构造函数God的类Vulcan, Loki and Athena

public class Vulcan extends God {

private Vulcan(String name, PowerType powerType, AttackType attackType,
        ArrayList<ItemStack> abilities, Pantheon pantheon,
        GodClass godClass, ArrayList<Pro> pros, int favorCost, int gemCost,
        int health, int mana, int speed, int range, double attackSpeed,
        int damage, int physicalProtection, int magicalProtection, int hp5,
        int mp5) {
    super("VULCAN", PowerType.MAGICAL, AttackType.RANGED, abilities,
            Pantheon.ROMAN, GodClass.MAGE, Arrays.asList(
                    Pro.HIGH_AREA_DAMAGE, Pro.PUSHER), 5500, 200, 380, 245,
            360, 55, 0.9, 34, 13, 30, 7, 5);
}

所以现在Vulcan类将被添加到gods ArrayList中,对吧?如果我错了,请纠正我 好吧,当我打印列表gods时,我得到一个空的ArrayList 我做错什么了吗?或者我是否必须定义类Vulcan, Loki and Athena?我很困惑,请帮忙。

3 个答案:

答案 0 :(得分:3)

当你说John, Michael and Levi时,在我看来,它们应该是类Human的一个实例,而不是完全不同的类。

可能你需要这样的东西,但不确定:

public Human {
    public static ArrayList<Human> humans = new ArrayList<Human>();

    private String name;
    private int old;

    public Human(String name, int old) {
        this.name = name;
        this.old = old;
        humans.add(this);
    }

    public static void main(String args[])
    {
        Human john = new Human("John", 21);
        Human michael = new Human("Michael", 31);
        Human levi = new Human("Levi", 41);

        System.out.println(Human.humans.size());
    }
}

答案 1 :(得分:1)

将约翰,列维和迈克尔作为人类的一个实例是很有意义的。

Human john = new Human( "John", 23 );
Human levi = new Human( "Levi", 24 );
Human michael = new Human( "Michael", 25 );

答案 2 :(得分:-1)

此代码可用于使用super()上的class John语句将值传递给超类构造函数。

class John extends Human {

public John(String name, int old) {
    super(name, old);
}

public static void main(String[] args) {
    new John("John", 23);
    new John("Michael", 31);
    new John("Levi", 41);

}
}