我是否应该在派生 class 中将 'count' 设为静态,如何访问它

Should I make 'count' as static in derived class, how to access it

我有一个 class,比方说 CargoShip,它是 'Starcraft' 的派生 class,它实现了接口 IStarcraft。

这是应该 return 每艘船的计数(实例数)的函数:

public static void printInstanceNumberPerClass (ArrayList<ISpacecraft> fleet){}

我想到了一个解决方案,我相信它会起作用,在 ISpacecraft 中声明 'getCount()',然后在每艘 SpaceCraft 飞船(我有 4 艘飞船)中覆盖它,然后遍历每个人他们,多态性。 好吧,我明白了。但是因为这个函数是静态的(是的,我知道我们不需要创建一个对象来使用它)我认为它可能会告诉我一些不同的东西。那是什么意思?是否可以在每艘船上创建 'static count = 0' 并以某种方式访问​​它?

那么问题是,当我得到 ISpacecraft 对象的数组列表时,如何访问该静态字段?

多态性不适用于静态方法,方法解析非常不同。对于实例上的虚方法,代码可能会引用具有类型为 superclass 或接口的变量的对象,并且调用方法是在运行时解析的,而您的应用程序代码不需要知道确切的具体类型。对于静态方法,您可以在特定的 class 上调用它,如果找不到该方法,则会在 superclass 上调用它。您的代码必须从一些 subclass 开始,并且解析从那里开始层次结构。对于静态方法,您不可能不知道调用该方法的低级 class,就像在对象上使用实例方法一样。对于对象,您不能拥有您认为理所当然的抽象级别。

markspace 的评论提供了一个更好的选择。对 java.lang.Math 这样的无状态函数使用静态方法。