如下程序是为变量i赋值。若程序的输出结果是180。请将程序补充完整。 注意:不改动程序结构,不得增行或删行。 class Base { int i; Base() { add(10);

admin2009-12-22  35

问题 如下程序是为变量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
转载请注明原文地址:https://jikaoti.com/ti/jQb0FFFM
0

相关试题推荐
最新回复(0)