日期:2014-05-20  浏览次数:20879 次

判断两个类或接口或类与接口是否有继承关系的方法
Class中有个方法 public native boolean isAssignableFrom(Class<?> cls)用来判断子类是否继承于

父类的或者父接口的。
你会这样子写:
Class clazz = ....;
clazz.isAssignableFrom(子类名称);返回true说明是挂号里的类的父类或父接口。
clazz.isAssignableFrom(子类名称)里的子类名称跟版本有关,好像是1.5以上的JDK这里的子类名称都

是使用的泛型编程。即传的传数是
class<T> 类型的,你用的时候自己斟酌下版本问题。
而常用的instanceof(class ..)是指该实例是否属于挂号中的类的父类的一个实例。 
如上面的例子:

class Supclass {

}

public class TestClass extends Supclass {
public static void main(String[] args) {
Class clazz = TestClass.class;
Class class1 = Supclass.class;
System.out.println(class1.isAssignableFrom(clazz));
if (class1.isAssignableFrom(clazz)) {
System.out.println("Supclass是TestClass的父类");
} else {
System.out.println("Supclass不是TestClass的父类");
}
}
}


接口的话也一样的:如下
package linearStruct;

public interface TestInterface {

}

class subclass implements TestInterface {
public static void main(String[] args) {
Class clazz = subclass.class;
Class class1 = TestInterface.class;
System.out.println(class1.isAssignableFrom(clazz));
if (class1.isAssignableFrom(clazz)) {
System.out.println("TestInterface是subclass的父类");
} else {
System.out.println("TestInterface不是subclass的父类");
}
}
}
继承 编程

------解决方案--------------------
这个应用的不多,更多的时候应该是需要判断某个对象是不是某个接口或类的实例。所以instanceof还是比较常用一些。
------解决方案--------------------
最普遍的还是使用instanceof 简洁方便。其实也可以用类名.getClass(); 
------解决方案--------------------
以前还真没有用过isAssignableFrom
------解决方案--------------------
简单的instanceof应该就可以了吧,用反射的代价是挺高的