在父类中能获取子类的属性吗?一般情况下是不行的,因为孩子尚未出世哪里来的属性。但有时需要在父类处理该类(包含子类)的所有属性,该怎么做呢,有种方法能解决——在父类中将子类的实例引用进来。假设BaseClass是基类,有个getAll方法用以获取该类的所有属性。SubClass继承子BaseClass,SSClass继承自SubClass,SSClass的实例调用getAll方法时获取SSClass及其父类的所有属性。具体做法如下:
import java.lang.reflect.Field; public class BaseClass { private String a; private int b; private final BaseClass bc = setBC(); // public BaseClass() { // bc = setBC(); // } private BaseClass setBC() { return this; } public void getAll() { Class clazz = this.bc.getClass(); do { Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { System.out.println(f.getName()); } clazz = clazz.getSuperclass(); } while (clazz != Object.class); } }
子类就不用关心任何事了,不管它是否有自己的构造方法:
public class SubClass extends BaseClass { @ShareObject private boolean c; }
public class SSClass extends SubClass { private String ss; public SSClass(int i) { ss = ""; } }
测试:
@Test public void get() { SSClass sc = new SSClass(1); sc.getAll(); }
输出内容:
ss
c
a
b
bc