问题 单项选择题

下面程序段的输出结果是( )。   class Base   {   int i;   Base()   {   add(1);   }   void add(int v)   {   i+=v:   }   void print()   {   System.out.println(i);   }   }   class Extension extends Base   {   Extension()   {   add(2);   }   void add(int v)   {   i+=v*2:   }   }   public class Test   {   public static void main(String args[])   {   bogo(new Extension());   }   static void bogo(Base b)   {   b.add(8);   b.print();   }   }

A.9

B.18

C.20

D.22

答案

参考答案:D

解析:【解析】本题考查继承和构造函数的用法。首先要明确对一个类的继承是指在父类的基础上构建了一个子类,子类继承了父类的方法和状态。题目所给程序段创建的是Extension类的实例,在运行时,从main()函数进入程序,所有调用add()方法的过程将始终和Extension类的add()方法动态绑定。初始值:i=0;创建实例newExtension();先调用父类的默认构造函数Base(),并在父类的默认构造函数中执行add(1),i=O+1×2,所以i=2,再调用子类的默认构造函数Extension(),子类的默认构造函数中执行add(2),i-2+2×2,所以i=6;执行add(8);i=6+8×2,因此,最终i=22,正确答案为选项D。

填空题
问答题 论述题