嗨,我正试图找出子类,形成一个超类对象。
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不会知道它有任何子类",你能告诉我我的上述问题一开始是否有效,或者我是否缺少任何基本概念
提前谢谢。
getClass()方法将在运行时返回对象的具体类型,而不是引用类型。所以简单地做:
Super superObject = new Sub1();
Class<? extends Super> klass = superObject.getClass();
会给你Sub1.class从你的问题中还不清楚你想用它做什么。你可以简单地对它调用getName(),检查你的其他引用是否是相同类型的,等等。
您的问题"是否有可能找到superObject在Java中扩展的子类?"毫无意义。
无论如何,我想你正在寻找Class.isAssignableFrom()
可能在这方面有所帮助。
用法:
superClass.isAssignableFrom(subClass);
文档:
确定类或接口由该Class对象表示的是与超类相同或是超类类或指定的表示的接口类参数。
参考
您想要此方法:
boolean isList = Subclass.isAssignableFrom(Superclass);
来自JavaDoc:
确定此class对象表示的类或接口是否与指定的class参数表示的类或者接口相同,或者是该类或者接口的超类或者超接口。如果是,则返回true;否则返回false。如果此Class对象表示基元类型,则如果指定的Class参数正是此Class对象,则此方法返回true;否则返回false。
参考:
Class.isAssignableFrom(Class)