抽象静的メソッド/フィールド自体がない理由について、すでにいくつかのSOの質問がありますが、次の擬似コードを実装する方法について疑問に思っています:
class Animal {
abstract static int getNumberOfLegs(); // not possible
}
class Chicken inherits Animal {
static int getNumberOfLegs() { return 2; }
class Dog inherits Animal {
static int getNumberOfLegs() { return 4; }
Animal
ここに問題があります:継承するすべてのクラスにメソッドが含まれていることを確認したいと仮定しますgetNumberOfLegs()
(つまり、抽象クラスにすべての子クラスに共通のいくつかのメソッドを実装させたいことを除いて、ほとんどインターフェースのようです。したがって、純粋なインターフェースはそうではありませんここで働く)。getNumberOfLegs()
明らかに静的メソッドである必要があります (完全な世界では鶏や犬を不自由にしていないと仮定すると、getNumberOfLegs
インスタンスに依存しません)。
「抽象静的」メソッド/フィールドがないと、メソッドをクラスから除外することができ、Animal
一部の子クラスにそのメソッドがないというリスクがあります。またはgetNumberOfLegs
、インスタンス メソッドを作成することもできますが、その場合、動物の脚の数を調べるためにクラスをインスタンス化する必要があります (必須ではありませんが)。
通常、この状況をどのように実装しますか?
編集:ここで、これをどのように使用するかを示します。各動物の足の数が一意であると仮定すると (これはばかげていますが、とにかく...)、次のようになります。
Animal getModelAnimal(int numberOfLegs) {
if (numberOfLegs == Chicken.getNumberOfLegs()) return new Chicken();
else if (numberOfLegs == Dog.getNumberOfLegs()) return new Dog();
}