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反射机制的精髓啊
你没那么贵
2024-10-15 17:24:55
单单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 { }
月光很浅思念很暖
2024-10-15 18:38:47
用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"); } }