您好我正在尝试找出子类,形成一个超类对象。
if Class Super is the super class.
and Class Sub1 and Class Sub2 extends Class Super.(all classes are public)
Lets say I have a object of Super type as
Super superObject = new Sub1();
现在对于superObject,是否可能找到superObject在Java中扩展的子类?
由于“SuperClass不会知道它有任何SubClasses”,你能不能首先告诉我上面的问题是有效,还是我错过了任何基本概念?
提前致谢。
答案 0 :(得分:2)
getClass()方法将在运行时返回对象的具体类型,而不是引用类型。所以简单地做:
Super superObject = new Sub1();
Class<? extends Super> klass = superObject.getClass();
会给你Sub1.class从你的问题中你不清楚你想用它做什么。你可以简单地调用它上面的getName(),检查你的其他引用是否属于同一类型等等。
答案 1 :(得分:2)
您的问题,“是否有可能找到superObject在Java中扩展哪个子类?”,没有任何意义。
无论如何,我认为你在寻找Class.isAssignableFrom()
可能会有所帮助。
<强>用法:强>
superClass.isAssignableFrom(subClass);
<强>文档:强>
确定类或接口 由这个Class对象表示的是 要么是相同的,要么是超类 或者是类或者的超级接口 由指定的接口表示 类参数。
答案 2 :(得分:0)
你想要这个方法:
boolean isList = Subclass.isAssignableFrom(Superclass);
来自JavaDoc:
确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true。否则返回false。
参考:
Class.isAssignableFrom(Class)