instanceof关键字用来在运行时指出对象是否是特定类的一个实例。
判断结果通过返回一个boolean类型值来指示,true则左侧对象为右侧类的实例。
举个栗子:
//接口
public interface CircularOrbit<L,E> {
...
}
//由接口衍生出的抽象类
public abstract class ConcreteCircularOrbit<L, E> implements CircularOrbit<L,E> {
...
}
//由抽象类具体化得到的子类
public class OrbitofStellarSystem<L,E> extends ConcreteCircularOrbit<L,E>{
...
}
public class OrbitofAtom <L,E> extends ConcreteCircularOrbit<L,E> {
...
}
public class OrbitofSocialNetwork <L,E> extends ConcreteCircularOrbit<L,E> {
...
}
public void getDifference (CircularOrbit c1, CircularOrbit c2) {
//若c1,c2均为OrbitofStellarSystem的实例则执行此方法
if (c1 instanceof OrbitofStellarSystem && c2 instanceof OrbitofStellarSystem) {
System.out.println("两行星轨道的差异为:");
}
//若c1,c2均为OrbitofAtom的实例则执行此方法
else if (c1 instanceof OrbitofAtom && c2 instanceof OrbitofAtom) {
System.out.println("两原子轨道间的差异为:");
}
//若c1,c2均为OrbitofSocialNetwork的实例则执行此方法
else if (c1 instanceof OrbitofSocialNetwork && c2 instanceof OrbitofSocialNetwork) {
System.out.println("两社交网络间的差异为:");
}
}
需要注意的是上述代码中不能将instanceof后的子类泛型化