对象的调用方法,即Interface的实例

时间:2018-03-05 21:15:57

标签: java interface instanceof

我有一个ClassA数组,它不实现任何接口。但是有一个ClassB和一个ClassC,它们都实现了接口InterfaceAInterfaceA看起来像这样:

public interface InterfaceA {
    int methodA();
}

现在我想遍历我的ClassA实例数组(其中还包含ClassBClassC的一些实例),我希望获得{的每个结果的总和{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(),你会做什么?

1 个答案:

答案 0 :(得分:2)

你应该使用强制转换来让编译器满意。在您的代码中,methodA在a上调用,它可以是ClassA的实例,也可以是ClassB或其他任何实例。 由于您已经限制非interfaceA实例到达IF块,因此您可以使用类型转换。

for (final ObjectA a : myArray) {
    if (a instanceof InterfaceA) {
        result += ((InterfaceA)a).methodA();
    }
}