一个类的加载问题题目

如题,如下代码输出结果是什么?

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的输出结果有点疑惑。

解释:

当子类重写了父类方法,向上转型后调用的是子类方法;

子类没有重写父类方法,向上转型后调用的是父类方法。
原文地址:https://www.cnblogs.com/JiaJoa/p/7793553.html