考虑这段代码
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
属于type Parent
,但是将其分配给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
答案 0 :(得分:0)
也许尝试使用getClass().getSuperclass()
?
答案 1 :(得分:0)
我认为没有其他方法可以找到而不仅仅是循环超类。
Class<?> c = p1.getClass();
while (c.getSuperclass() != Object.class) {
c = c.getSuperclass();
}
System.out.println("the class name is "+ c.getClass());
答案 2 :(得分:0)
getClass().getSuperclass().getName()
但是从来没有这样做,这是非常糟糕的设计
编辑:
在扩展版中,您需要一个循环
Parent superClass = p1.getClass();
while (superClass.getSuperclass() != Object.class) {
superClass = superClass.getSuperclass();
}
superClass.getName();
答案 3 :(得分:-1)
获取直接超类
p1.getClass().getSuperClass();
但是,如果您要声明界面,则可以使用
Class[] interfaces = p1.getInterfaces();
if(interfaces != null){
for(Class i : interfaces){
System.out.println(i);
}
}