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并且它有编译错误请帮助
编辑解决了你需要比较基类可以从扩展漂亮的傻瓜中分配你不能使用的是类的抽象反正
答案 0 :(得分:2)
您的班级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
。具体来说,此方法测试是否可以通过身份转换<将此类对象所代表的类型转换为 测试 / strong>或通过扩展参考转化。有关详细信息,请参阅Java语言规范,5.1.1和5.1.4部分。