如下程序是为变量i赋值。若程序的输出结果是180。请将程序补充完整。 注意:不改动程序结构,不得增行或删行。 class Base { int i; Base() { add(10); } void add(int v) { i+=v; } void print() { System.out.println(i); } } class Extension extends Base { Extension() { add(______); } void add(int v) { i+=v*2; } } public class ConstructTest3 { public static void main(String args[]) { bogo(new Extension()); } static void bogo(Base b) { b.add(60); b.print(); } }
【正确答案】正确答案:20
【答案解析】解析:本题综合考查了几个知识点,如调用子类的构造函数时,会先调用父类的构造函数;如果在子类的构造函数中没有显示调用父类的构造函数,那么创建子类的实例时,会先调用父类的缺省构造函数;方法的动态绑定。这些知识是考试的难点。以上代码创建的是Extension类的实例,所以,在运行时,所有调用add()方法的过程,将始终和Extension类的 add()方法动态绑定。以下是程序依次对变量i的改变过程。 初始值:i=0 Step1:创建实例new Extension() 先调用父类的缺省构造函数Base(),注意,父类中的add方法已被子类重写。父类的缺省构造函数中执行add(10),i=0+10*2得到i=20,再调用子类的缺省构造函数Extension(),假设横线处应填入的数是x,子类的缺省构造函数中执行add(x),i=20+x*2。 step2:执行add(60) i=20+x*2+60*2=180得到x=20