鉴于以下内容,以伪代码
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;
}
有没有办法定义breed()方法,这取决于任何子类调用它的BREEDTIME? bug
的每个子类都保证初始化为BREEDTIME。
此外,Ants应该繁殖其他Ants,因此在breed()内部调用的构造函数必须是调用breed()的子类类型的构造函数。
我在这里咆哮错误的树吗?
答案 0 :(得分:5)
我会使用抽象方法来做到这一点。在您的超类中将getBreedTime()定义为abstract,然后在每个子类中实现它以返回适当的常量。
使用像这样的静态字段,你无法真正做到你想做的事。
答案 1 :(得分:0)
不能这样做。静态字段也是继承的。只需删除静态关键字。如果你不想加倍整数,那么你可以为getTime创建抽象方法或创建枚举:
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;
}