1

鉴于以下,在伪代码中

abstract public class Bug {
    private static int BREEDTIME;

    public void breed() {
    if (this.age % this.BREEDTIME) {
        world.setAt(new this.class(newX, newY, this.world);
    }
    }
}

public class Ant extends Bug {
    private static int BREEDTIME = 3;
}

public class Doodlebug extends Bug {
    private static int BREEDTIME = 8;
}

有没有办法定义品种()方法,使其取决于调用它的任何子类的 BREEDTIME ?保证每个子类bug都初始化了 BREEDTIME。

此外,蚂蚁应该繁殖其他蚂蚁,因此在breed() 中调用的构造函数必须是调用breed() 的子类类型的构造函数。

我在这里吠错树了吗?

4

2 回答 2

5

我会使用抽象方法来做到这一点。在您的超类中将 getBreedTime() 定义为抽象,然后在每个子类中实现它以返回适当的常量。

使用这样的静态字段,您无法真正做您想做的事情。

于 2012-05-01T05:03:23.747 回答
0

不能这样做。静态字段也是继承的。只需删除 static 关键字。如果您不想加倍整数,那么您可以创建抽象方法来获取时间或创建枚举:

abstract class Bug {
    private int age;
    public void breed() {
        if (this.age % BREEDTIME.valueOf(this.getClass().getName()).getTime() == 0) {
        }
    }
}

class Ant extends Bug {
}

class Doodlebug extends Bug {
}

enum BREEDTIME {
    Ant(3),
    Doodlebug(8);

    private BREEDTIME(int time) {
        this.time = time;
    }

    public int getTime() {
        return time;
    }

    private int time;
}
于 2012-05-01T05:09:56.163 回答