Java 可从';对于子类,t返回true

Java 可从';对于子类,t返回true,java,inheritance,subclass,Java,Inheritance,Subclass,所以我想检查一个类是否可以分配给一个包含很多子类的超类,比如 public class A { public A(){ } } public class B extends A { public B(){ } } public class C extends B { public C(){ } } public static void main() { A a = new C(); boolean whyAmIFalse = a.getClass

所以我想检查一个类是否可以分配给一个包含很多子类的超类,比如

public class A { 
    public A(){ }
}

public class B extends A { 
    public B(){ }
}

public class C extends B {
    public C(){ }
}

public static void main() {
    A a = new C();
    boolean whyAmIFalse = a.getClass().isAssignableFrom(B.class);
}
为什么返回错误?很明显,它可以被分配到B类

B b = (B)a

不返回错误,那么为什么返回false呢。这不是它描述自己的功能吗?是否有一个函数能够完成我想要的(即我是那个类或它的子类)?

这是因为
getClass()
返回的是实际的类,而不是变量的声明类--
a.getClass()
将返回类
C
(C.class),这是分配给变量
A A
的对象的实际类,您确实不能将
B
分配给A
C


因为类B不扩展/实现类C,而类C正是isAssignableFrom()测试的对象。根据您的示例,类B的实例可能是类C的实例。要测试这一点,请使用“instanceof”。

如果您想测试
a
的实际类型是否为
B
或子类型,那么您可以将其反向设置为:

 B.class.isAssignableFrom(a.getClass());

有没有办法说,这个类是我想要的类还是它的任何子类?是的,
isAssignableFrom
。但我怀疑你的意思可能是
B.class.isAssignableFrom(a.getClass())
,而不是反过来。@LouisWasserman哦,天哪,你搞定了,这正是我想要的。如果你想发布一个带有评论的答案,我会标记它,我只是把我想要的写了回去。谢谢你,先生,我已经为此奋斗了将近一个小时了。我现在觉得自己像个白痴。