dev*_*per 45 java interface instanceof
instanceof可用于测试对象是否是给定类的直接或下降实例.instanceof即使接口无法像类一样实例化,也可以与接口一起使用.任何人都可以解释一下instanceof有效
sun*_*nil 54
首先,我们可以存储instances的实现特定的类interface在interface reference variable这样的.
package com.test;
public class Test implements Testeable {
public static void main(String[] args) {
Testeable testeable = new Test();
// OR
Test test = new Test();
if (testeable instanceof Testeable)
System.out.println("instanceof succeeded");
if (test instanceof Testeable)
System.out.println("instanceof succeeded");
}
}
interface Testeable {
}
Run Code Online (Sandbox Code Playgroud)
即,任何实现特定接口的运行时实例都将通过instanceof测试
编辑
和输出
instanceof succeeded
instanceof succeeded
Run Code Online (Sandbox Code Playgroud)
@RohitJain
您可以使用像这样的匿名内部类来创建接口实例
Runnable runnable = new Runnable() {
public void run() {
System.out.println("inside run");
}
};
Run Code Online (Sandbox Code Playgroud)
并且您使用这样的instanceof运算符测试实例是接口类型
System.out.println(runnable instanceof Runnable);
Run Code Online (Sandbox Code Playgroud)
结果是"真的"
您instanceof对a reference进行了instance检查,并检查该instance特定reference指向的类型.
现在既然你可以创建一个引用interface,它指向一个实现的实例class(相同的概念,Super class reference指向subclass instance).所以,你可以instanceof检查它.
例如: -
public interface MyInterface {
}
class ImplClass implements MyInterface {
public static void main(String[] args) {
MyInterface obj = new ImplClass();
System.out.println(obj instanceof ImplClass); // Will print true.
}
}
Run Code Online (Sandbox Code Playgroud)
public class Programmers {\n\n public static boolean hasReallife(Programmer programmer) {\n return programmer instanceof Reallife; \xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n } \xe2\x95\x91\n \xe2\x95\x91\n} \xe2\x95\x91\n \xe2\x96\xbc\npublic class ReallifeProgrammer extends Programmer implements Reallife {\n\n public ReallifeProgrammer() {\n diseases.get("Obesity").heal();\n diseases.get("Perfectionism").heal();\n diseases.get("Agoraphobia").heal();\n }\n\n @Override\n public void goOut() {\n house.getPC().shutDown();\n wife.argue();\n }\n\n @Override\n public void doSports() {\n goOut();\n BigWideWorld.getGym("McFit").visit();\n }\n\n @Override\n public void meetFriends() {\n goOut();\n BigWideWorld.searchFriend().meet();\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n