多个接口:instanceof无法区分不同的接口

时间:2014-01-15 15:33:56

标签: java

如果我有以下内容:

interface a {
    void a_m();
}

interface b {
    void b_m();
}

class x implements a, b {

    public static void main(String [] args) {
         x cx = new x();
         System.out.println(cx instanceof a); <-- true
         System.out.println(cx instanceof b); <-- true
    }

    void a_m() {}
    void b_m() {}

}

instanceof运算符将为两者返回true。

当然我知道getClass()会做到这一点,但我对这里使用instanceof感到困惑。

在上面的例子中,接口a和b是不同的,必须有一种方法可以区分它们(就x类而言)。

任何建议都会很棒

1 个答案:

答案 0 :(得分:1)

instanceof只是检查你是否真的是某个事物的实例。换句话说,你是否可以合法地分配/演员/等等。

在这种情况下,X同时实现A和B,因此它确实是两者的实例。如果您想检查X,那么您将instanceof X,而不是instanceof Ainstanceof B

虽然没有涉及“分开”。 X是X,如果你愿意,你也可以将它用作A或B,但只有一个对象。当您创建X时,每个X 必须可用作A,B和X.这就是实现接口的意思。

想象一下X是一所房子。 A所说的是“X必须有一个前门”,B说“X必须有一个后门”。如果Y实现A而不是B,那么:

 X instanceof A == X has a front door == true
 X instanceof B == X has a back door == true
 Y instanceof A == Y has a front door == true
 Y instanceof B == Y has a back door == false