利用反射来深度剖析子类继承父类时,都会继承哪些东西?
问题一:子类可以继承父类的静态变量吗?
public class Test5 { public static void main(String[] args) { Class<Cat> c = Cat.class; Field fields[] = c.getFields(); for(Field f :fields) { System.out.println("变量名为:"+f.getName()); } } } class Animal{ public static String name="父类"; } class Cat extends Animal{ public static String s_name = "子类"; }
运行结果:
由此可以看出,子类是会继承父类的静态变量的
问题二:子类可以继承父类的私有静态变量吗?
public class Test5 { public static void main(String[] args) { Class<Cat> c = Cat.class; Field fields[] = c.getFields(); for(Field f :fields) { System.out.println("变量名为:"+f.getName()); } } } class Animal{ private static String name="父类"; } class Cat extends Animal{ public static String s_name = "子类"; }
运行结果为:
由此看出:子类是无法继承父类的私有静态变量的
问题三:子类可以覆盖父类的静态变量吗?
package test1; import java.lang.reflect.Field; public class Test5 { public static void main(String[] args) { Class<Cat> c = Cat.class; Field fields[] = c.getDeclaredFields(); for(Field f :fields) { System.out.println("变量名为:"+f.getName()); } System.out.println(Cat.name); Animal a = new Cat(); System.out.println(a.name); } } class Animal{ // public static String name="父类";
private static String name = "父类"; } class Cat extends Animal{ public static String name = "子类"; }
运行结果为:
这里可以看出:子类是可以“覆盖”父类的静态变量的,但是即便使用父类的引用指向子类的实例后,父类的引用指向的静态变量的值仍是原父类的。