刚做到一道题,有关继承的。为什么这道题输出结果不是7?没有电脑码字不方便,就只有图了。。
1、父类 TestDemo 中的 main()函数调用的是子类 Demo 中的 some()方法,传入参数为7
2、接下来的执行步骤是调用子类中public void some(int x)方法,传入x值为7,继续执行super.some(x),此句作用是调用父类中的
some(int x)方法,传入x值为7,此时即父类中的m=7,继续执行System.out.println(m),此句作用输出m的值,该m是子类中定
义的m,与父类中的m值无关,而子类的m值一直未被修改过,即仍然是初始值8
3、所以选 B
子类中覆盖了父类中的some()方法,虽然子类中又用super调了父类中的some(),但是只是修改了父类的m,输出的还是子类的m
就是好样的心不错,美眉
你仔细看看,传的值是x,求的是m
这就要看M是在父类中输出还是在子类中输出了
因为题目输出的m用的是子类那个 你可以把那个输出改成System.out.println(super.m) ,这个才是你所想的结果
demo中的some输出的m相当于this.m,是本实例也就是子类实例的属性,如果输出的为super.m答案就是7
子类父类各有一个整型变量m,存储空间不同。super.some(x)是对父类的m进行赋值,并不会改变子类的m,然后输出的是子类的m值。
子类和父类中,相同的方法会被重写,变量没有重写之说,如果子类声明了跟父类一样的变量,那意味着子类将有两个相同名称的变量。一个存放在子类实例对象中,一个存放在父类子对象中。