1

考虑这段代码

class Parent {

}

class Child extends Parent {

}

public class InheritenceExample {

    public static void main(String[] args){
        Parent p1 = new Child();
        System.out.println("the class name is "+ p1.getClass().getName());

    }

}

我声明p1为 of type Parent,但将其分配给 a Child instance。当我这样做时,getClass().getName()我得到Child了输出。在这种情况下,如何获得声明的类型Parent

编辑:这并不适用于所有情况:getClass().getSuperclass().getName()

考虑这段代码

class Parent {

}

class Child extends Parent {

}

class GrandChild extends Child {


}

public class InheritenceExample {

    public static void main(String[] args){
        Parent p1 = new GrandChild();
        System.out.println("the class name is "+ p1.getClass().getSuperclass().getName());

    }

}

这输出Child,但它必须是Parent

4

4 回答 4

0

也许尝试使用getClass().getSuperclass()

于 2013-11-05T21:22:01.913 回答
0

我认为除了循环超类之外没有其他方法可以找到。

Class<?> c = p1.getClass();

while (c.getSuperclass() != Object.class) {
  c = c.getSuperclass();
}

System.out.println("the class name is "+ c.getClass());
于 2013-11-05T21:22:09.397 回答
0
   getClass().getSuperclass().getName()

但是永远不要这样做,这是非常糟糕的设计

编辑:

在您的扩展版本中,您将需要一个循环

Parent superClass = p1.getClass();
while (superClass.getSuperclass() != Object.class) {
    superClass = superClass.getSuperclass();
}
superClass.getName();
于 2013-11-05T21:23:02.090 回答
-1

获得直接的超类

p1.getClass().getSuperClass();

但是,如果您声明一个接口,您可以使用

        Class[] interfaces = p1.getInterfaces();
        if(interfaces != null){
            for(Class i : interfaces){
                System.out.println(i);
            }
        }
于 2013-11-05T21:26:43.117 回答