一个类的加载问题题目
如题,如下代码输出结果是什么?
public class ClassLoadTest { public static void main(String[] args) { ClassA a = new ClassLoadTest().new ClassB(); ClassB b = new ClassLoadTest().new ClassB(); System.out.println(a.field); //标记1 System.out.println(a.getField()); System.out.println(b.field); System.out.println(b.getField()); System.out.println(b.getSuperField()); System.out.println(a.getClass().getName()); System.out.println(b.getClass().getName()); System.out.println(b.getClass().getSuperclass().getName()); } public class ClassA{ public int field = 1; public int getField(){ return field; } } public class ClassB extends ClassA{ public int field = 0; public int getField(){ return field; } public int getSuperField(){ return super.field; } } }
输出结果:
1
0
0
0
1
com.job.examine.ClassLoadTest$ClassB
com.job.examine.ClassLoadTest$ClassB
com.job.examine.ClassLoadTest$ClassA
困惑:
标记1的输出结果有点疑惑。
解释:
当子类重写了父类方法,向上转型后调用的是子类方法;
子类没有重写父类方法,向上转型后调用的是父类方法。