java - 我应该在派生类中将 'count' 设置为静态吗?如何访问它

标签 java arraylist static static-methods

我有一个类,比如说 CargoShip,它是“Starcraft”的派生类,它实现了 IStarcraft 接口(interface)。

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

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

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

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

最佳答案

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

markspace 的注释提供了一个更好的选择。对无状态函数(如 java.lang.Math)使用静态方法。

关于java - 我应该在派生类中将 'count' 设置为静态吗?如何访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44077929/

相关文章:

java - 无法将 int[] 类型添加到 ArrayList

Java:ConcurrentModificationException,3个线程,不同的列表,相同的对象

java - 无法比较子类中ArrayList的大小

java - JAppet 加载图像

C 编译器忽略 'static' 的结构声明

java - Android fragment 翻译动画显示、隐藏

java - Hibernate 一对一保存对象

android - 如何将数据从一个 Activity 创建的后台线程发送到另一个已知处于 Activity 状态的 Activity ?

java - 为什么不抛出异常的代码允许捕获已检查的异常?

Java 将文件转换为 ZipFile