下面程序段的输出结果是 class Base { int i; Base() { add(1); } void ad

admin2010-02-22  25

问题 下面程序段的输出结果是        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+=*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

答案8

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

最新回复(0)