从子类中获取父类

时间:2014-07-14 19:01:39

标签: java inheritance

我有一个接受单个参数的方法。该参数可以是任何继承自同一父类E的A,B,C或D类。但我不知道父类的名称(也许它是"" E&#34 ;也许是" F")。

我希望我的方法接受父类作为参数,所以我可以传入一个子对象(所以我只需要一个方法的实现)。

如何找到父类的名称?它是在一个罐子里,我没有源代码访问。

修改

示例的方法示例如下:

private void processResults(final ???parentClassName??? aParentClassName) {
    ...
}

3 个答案:

答案 0 :(得分:2)

尝试使用Class#getSuperclass()

  

返回表示此Class所代表的实体(类,接口,基本类型或void)的超类的Class。

     
      
  • 如果此Class表示Object类,接口,基本类型或void,则返回null。

  •   
  • 如果此对象表示数组类,则返回表示Object类的Class对象。

  •   

示例代码:

A.class.getSuperclass().getName()

aObject.getClass().getSuperclass().getName()

答案 1 :(得分:1)

您可以使用JDK附带的javap工具。

假设您的jar文件名为unknown.jar,并且您感兴趣的父类的类A的包是com.example.unknown

你可以这样做:

javap -classpath unknown.jar com.example.unknown.A

输出结果如下:

Compiled from "A.java"
public class com.example.unknown.A extends com.example.unknown.E {
  public com.example.unknown.A();
}

它还会显示A的公共API。它还可以显示更多信息,具体取决于您传递的命令行参数。使用javap -help查看所有内容。

(注意:如果-classpath有其他依赖项,您可能需要为unknown.jar参数指定其他jar或目录。)

答案 2 :(得分:0)

如果您不知道超类/超类的名称,我认为是不可能的。

如果只有4个类,为什么不创建一个接口并让你的类A到D继承它们?可能更容易:)