执行下列代码后,输出的结果为(  )。 class Base { int x = 30; void setX( ) {x=1O;} } class SubClass extends Base { in

admin2010-12-17  21

问题 执行下列代码后,输出的结果为(  )。    class Base {       int x = 30;       void setX( ) {x=1O;}    }    class SubClass extends Base {        int x=40;        void setX ( ) {x=20;}        int getX( ) {return super. x; }    }    public class Test {        public static void main(String[ ] args) {            SubClass sub=new SubClass( );            sub. setX( );            System. out. println(sub, getX( ) ); }    }

选项 A、10
B、20
C、30
D、40

答案C

解析 本题主要考查有关类的继承方面的知识。Java中,类是分层次的,当子类的成员变量与父类的成员变量名字相同时,子类的成员变量会隐藏父类的成员变量,当子类的成员方法与父类的成员方法名字、参数列表、返回值类型都相同时,子类的方法是父类的方法的重写。这样,在子类的对象调用方法时,是按照子类中方法定义执行,隐藏父类的方法的定义。当子类隐藏了父类的变量,并重写了父类的方法后,又要使用父类变量或父类被重写的方法时,可通过super来实现对父类变量的访问和父类方法的调用。因此,本题中在main ()中调用setX ()时,是调用的SubClass类中的setX ()函数,同时将SubClass类中的i变量值设为20。当main ()函数中调用getX ()函数时,并不是取了SubClass类中的i的值,而是取的Base类中i变量的值,此时i的值为其初始值30。
转载请注明原文地址:https://kaotiyun.com/show/He9p777K
0

最新回复(0)