我有一个ClassA
数组,它不实现任何接口。但是有一个ClassB
和一个ClassC
,它们都实现了接口InterfaceA
。 InterfaceA
看起来像这样:
public interface InterfaceA {
int methodA();
}
现在我想遍历我的ClassA
实例数组(其中还包含ClassB
和ClassC
的一些实例),我希望获得{的每个结果的总和{1}}。
在运行时,以下代码应该起作用(imO):
methodA()
但由于myArray = new ObjectA[10];
// how the Array gets it's content is irrelevant here
int result = 0;
for (final ObjectA a : myArray) {
if (a instanceof InterfaceA) {
result += a.methodA();
}
}
不一定有ClassA
,我的编译器对此不满意。它认为methodA()
没有定义,因为编译器不知道if条件。那么,如果你没有实现抽象a.methodA()
到methodA()
,你会做什么?
答案 0 :(得分:2)
你应该使用强制转换来让编译器满意。在您的代码中,methodA在a
上调用,它可以是ClassA的实例,也可以是ClassB或其他任何实例。
由于您已经限制非interfaceA实例到达IF块,因此您可以使用类型转换。
for (final ObjectA a : myArray) {
if (a instanceof InterfaceA) {
result += ((InterfaceA)a).methodA();
}
}