gpt4 book ai didi

oop - "Abstract static"方法 - 如何?

转载 作者:行者123 更新时间:2023-12-04 01:01:20 30 4
gpt4 key购买 nike

已经有几个关于为什么没有抽象静态方法/字段的问题,但我想知道如何实现以下伪代码:

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()方法(即几乎像一个接口(interface),除了我确实希望抽象类实现所有子类共有的几种方法,因此纯接口(interface)在这里不起作用)。 getNumberOfLegs()显然应该是一个静态方法(假设在一个完美的世界中,我们没有'让鸡和狗残废,所以 getNumberOfLegs 不依赖于实例)。

如果没有“抽象静态”方法/字段,可以将方法从 Animal 中排除。类,则存在某些子类没有该方法的风险。或者可以制作 getNumberOfLegs一个实例方法,但随后必须实例化一个类来找出该动物有多少条腿——即使这不是必需的。

通常如何实现这种情况?

编辑:这里我可以如何使用它。假设(现在这很荒谬,但无论如何......)每只动物的腿数是独一无二的,所以我可能会有类似的东西:
Animal getModelAnimal(int numberOfLegs) {
if (numberOfLegs == Chicken.getNumberOfLegs()) return new Chicken();
else if (numberOfLegs == Dog.getNumberOfLegs()) return new Dog();
}

最佳答案

How do one usually go about implementing this situation?



通常的解决方案是使有问题的方法成为实例方法。

getNumberOfLegs() obviously should be a static method (assuming that in a perfect world we dont' have crippled chicken and dogs so getNumberOfLegs is not instance-dependent).



那是强调 不是 明显的!我们不会为完美世界编程,在现实世界中,四足动物有时有一条、两条或三条(或五条)腿。

如果您的程序需要动物定义而不是动物实例,请继续为此创建一个类。
class AnimalDefinition {
public string getScientificName();
public string getCommonName();
public int getNumberOfLegs();
public bool getIsAmphibious();
// etc.
}

然后在程序开始时初始化这些集合 - 理想情况下从数据库或配置文件中添加动物定义,而无需编写或编译另一行代码。 (而且您可以使用更少的类型。)

关于oop - "Abstract static"方法 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936894/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com