如果我有以下内容:
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类而言)。
任何建议都会很棒
答案 0 :(得分:1)
instanceof
只是检查你是否真的是某个事物的实例。换句话说,你是否可以合法地分配/演员/等等。
在这种情况下,X同时实现A和B,因此它确实是两者的实例。如果您想检查X,那么您将instanceof X
,而不是instanceof A
和instanceof 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