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

admin2009-02-15  37

问题 下面程序段的输出结果是    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 (Basc B)       {        b.add(8);          b.print();        }    }

选项 A、9
B、18
C、20
D、22

答案8

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

最新回复(0)