public static void main(String[] args)
{
Class b = B.class;
System.out.println(b.isAssignableFrom(A.class));
}
static abstract class A{
}
static class B extends A{
}
输出:
false
输出为false我尝试使用instanceof并且它有编译错误请帮忙
编辑解决了你需要比较的基类可以从扩展的漂亮的傻瓜中分配你不能使用的是类的instanceof abstract
你的班级B
从A
延伸,而不是相反。想象一个更具体的例子
public abstract class Animal { ... }
public class Dog extends Animal { ... }
public class Cat extends Animal { ... }
B.class.isAssignableFrom(A.class)
的结果是正确的false
,因为你问
我可以将
Animal
(A
)指定给Dog
(B
)吗?
这是不可能的,因为可能有不同的动物,如Cat
。
Animal animal = new Cat();
Dog dog = (Dog) animal; // Will not work since animal is a cat
有关更多详细信息,请参阅该方法的documentation:
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它会返回
true
;否则它返回false
。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true
;否则它返回false
。具体来说,此方法测试是否可以通过标识转换或扩展引用转换将指定的Class参数表示的类型转换为此Class对象表示的类型。有关详细信息,请参阅Java语言规范,部分5.1.1和5.1.4。