【发布时间】:2015-06-17 04:21:20
【问题描述】:
我有 3 个光源类(X、Y 和 Z),它们继承自更通用的光源类。
3 个类中的 2 个,有一个“位置”字段。 (X 和 Y)
在另一种方法中,我遍历某个列表的所有光源,并检查当前光源是否是 Z 的实例。 如果不是,我想在不转换当前实例的情况下访问 X(或 Y)的“位置”字段。 但是编译器不让我,我想告诉它,在运行时,访问这个字段是可以的。
实际上,在这两种情况下,它都不会让我在没有强制转换的情况下访问该字段,尽管在运行时它不会中断。
是的,我可以多写几行来处理这个问题,但我出于好奇和我喜欢极简编码而提出这个问题。
for (Light light : lights) {
Vec vector;
if (light instanceof DirLight) vector = light.direction;
else vector = new Vec(intersectionPoint, light.position);
}
【问题讨论】:
标签: java inheritance casting compiler-errors polymorphism