面向对象
题目1
请简述下述程序打印结果,以及原因?
输出结果
主要考验类的执行顺序:父类,子类,静态块,静态字段,非静态块,非静态字段,构造器,方法
静态字段不是在类首次加载时就初始化,而是在首次访问该静态字段时才进行初始化,这种延迟初始化机制称为"触发式初始化"。
题目2
请简述下述程序打印结果,以及原因?
输出内容
- 构造
B的实例时:- 首先调用基类
A的构造函数(因为B继承自A)。 - 在
A的构造函数中,执行PrintFields()方法。
- 首先调用基类
- 关键点:
- 此时
B的构造函数尚未执行,因此:x已初始化为1(字段初始化器int x = 1;在进入构造函数前执行)。y尚未被赋值(y = -1在B的构造函数中),保持默认值0。
- 此时
- 多态行为:
PrintFields()是虚方法,且B重写了它,因此调用的是B的PrintFields()方法。- 输出
x=1,y=0。