在抽象类的方法体中引用抽象类的子类的静态字段

时间:2012-05-01 04:52:50

标签: java

鉴于以下内容,以伪代码

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()的子类类型的构造函数。

我在这里咆哮错误的树吗?

2 个答案:

答案 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;
}