判断两个类或接口或类与接口是否有继承关系的方法

Storm-Shadow 2013-04-17 12:49:50
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的父类");
}
}
}
...全文
219 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxiaofei 2013-04-17
  • 打赏
  • 举报
回复
简单的instanceof应该就可以了吧,用反射的代价是挺高的
菖蒲老先生 2013-04-17
  • 打赏
  • 举报
回复
以前还真没有用过isAssignableFrom
hack517 2013-04-17
  • 打赏
  • 举报
回复
最普遍的还是使用instanceof 简洁方便。其实也可以用类名.getClass();
rumlee 2013-04-17
  • 打赏
  • 举报
回复
这个应用的不多,更多的时候应该是需要判断某个对象是不是某个接口或类的实例。所以instanceof还是比较常用一些。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧