JAVA如何判断两个类之间是否满足继承关系?

如题所述

Class中有个方法 public native boolean isAssignableFrom(Class<?> cls)用来判断子类是否继承于父类的或者父接口的。
你会这样子写:
Class clazz = ....;
clazz.isAssignableFrom(子类名称);返回true说明是挂号里的类的父类或父接口。
clazz.isAssignableFrom(子类名称)里的子类名称跟版本有关,好像是1.5以上的JDK这里的子类名称都是使用的泛型编程。即传的传数是
class<T> 类型的,你用的时候自己斟酌下版本问题。
而常用的instanceof(class ..)是指该实例是否属于挂号中的类的父类的一个实例。
如上面的例子:
class A{

}

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

接口的话也一样的:如下
public interface A {

}

public class B implements A{
public static void main(String[] args) {
Class clazz = B.class;
Class class1 = A.class;
System.out.println(class1.isAssignableFrom(clazz));
if(class1.isAssignableFrom(clazz)){
System.out.println("A是B的父类");
}else{
System.out.println("A不是B的父类");
}
}
}
你测试时只需要把extends A和implements A去掉那就是A不是B的父类或者父接口的情况。 这就是java反射机制的精髓啊
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-15
单单instancesof无法判断出吧
A a = new A();
a instancesof A返回的也是true,
可以先用instancesof判断一个对象是否是属于这个类,然后在用.getClass()判断他们的两个类型不一样
public class Testing {

public static void main(String[] args) {
A a = new A();
B b = new B();
System.out.println(b instanceof A);
System.out.println(!b.getClass().toString().equals(A.class.toString()));
System.out.println(a instanceof A);
System.out.println(!a.getClass().toString().equals(A.class.toString()));
}
}
class A { }
class B extends A { }
第2个回答  2010-05-15
用instanceof运算符可以用来判断某对象对应的类是否实现了指定接口.

举例如下:
class A{

}

public class B extends A{
public static void main(String[] args){
B b=new B();
if(b instanceof A)
System.out.println("1");
else
System.out.println("0");
}
}
第3个回答  2010-05-14
看看有没有实现接口,implement接口,或者有没有继承其它的类 extends关键字了。
第4个回答  2010-05-14
instances of 这个方法啊。。
相似回答