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に依存するようにbreed()メソッドを定義する方法はありますか?の各サブクラスは、bugBREEDTIMEが初期化されることが保証されています。

また、Antsは他のAntを繁殖させる必要があるため、breed()内で呼び出されるコンストラクターは、breed()を呼び出すサブクラスの型のコンストラクターである必要があります。

私はここで間違った木を吠えていますか?

4

2 に答える 2

5

これを行うには、抽象的なメソッドを使用します。getBreedTime()をスーパークラスで抽象として定義し、それを各サブクラスに実装して適切な定数を返します。

このような静的フィールドを使用して、実際にやりたいことを行うことはできません。

于 2012-05-01T05:03:23.747 に答える
0

このようにすることはできません。静的フィールドも継承されます。staticキーワードを削除するだけです。intを2倍にしたくない場合は、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;
}
于 2012-05-01T05:09:56.163 に答える