java 父类如何在运行期动态获取子类类名

在 java 运行中父类动态的获取子类的类型, 并获取子类的类名。 不知道java 支不支持这样的操作。

给你写了3个类:

A类:

package cn.test;
public class A {
 public void test(){
  System.out.println(this.getClass());
  System.out.println(this.getClass().getSimpleName());
  System.out.println(this.getClass().getName());
 }
}

B类:

package cn.test;
public class B extends A{
 
}

Test类:

package cn.test;
public class Test {
 /**
  * @param args
  */
 public static void main(String[] args) {
  B b = new B();
  b.test();
 }
}

结果:

class cn.test.B
B
cn.test.B
你要知道,在继承关系中,不管父类还是子类,这些类里面的this都代表了最终new出来时的那个类型的实例对象,所以在父类中你可以中this获取到子类的信息!

不止一层继承关系时,你可以根据下面:

A类:

package cn.test;
public class A {
 public void test(){
  System.out.println(this.getClass());
  System.out.println(this.getClass().getSimpleName());
  System.out.println(this.getClass().getName());
  System.out.println(this.getClass().getSuperclass());
  System.out.println(this.getClass().getSuperclass().getSimpleName());
  System.out.println(this.getClass().getSuperclass().getName());
 }
}

B类:

package cn.test;
public class B extends A{
 B(){
//  System.out.println("B......");
 }
}

C类:

package cn.test;
public class C extends B{
 C(){
//  System.out.println("C...........");
 }
}

Test类:

package cn.test;
public class Test {
 /**
  * @param args
  */
 public static void main(String[] args) {
  C c = new C();
  c.test();
 }
}

结果:

class cn.test.C
C
cn.test.C
class cn.test.B
B
cn.test.B

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-29
在父类中设计一个获取类名的方法
protect String getName(){
return getClass().getSimpleName();
}
到时直接调用就可以获取子类类名了
第2个回答  2015-03-09
所有类都有一个公共的父类,那就是java.lang.Object,看JDK表述: public class Object类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法 所以抽象类有父类啊,如果没有写继承某个父类,那他的父类就是java.lang.Object
相似回答