已经有几个关于为什么没有抽象静态方法/字段的问题,但我想知道如何实现以下伪代码:
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();
}