一个类的加载问题题目

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

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

解释:

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

子类没有重写父类方法,向上转型后调用的是父类方法。
posted @ 2017-11-06 15:54  JiaJoa  阅读(196)  评论(0编辑  收藏  举报