问题描述
publicclassA{publicinta;publicA(){}publicA(inta){this.a=a;}publicintgetA(){returna;}publicvoidsetA(inta){this.a=a;}}publicclassBextendsA{publicB(inta){super(a);}publicvoidshowQuestion(){System.out.println("未修改之前:"+this.a);this.setA(2);System.out.println("修改之后:子类"+this.a);System.out.println("修改之后:父类"+super.a);super.setA(3);System.out.println("修改之后:子类"+this.a);System.out.println("修改之后:父类"+super.a);}}我的问题是,为何无论用this修改a的值还是用super修改a的值最后它俩的值都是一样的呢?难道它俩地址一样吗还是子类用的是父类a的复本,还是一直调用的就是父类的a这些情况我也只是猜测……不要骂我希望高手指点一二
解决方案
解决方案二:
因为this.a这个a,就是super.a里面的那个a你说得对,地址是一样的
解决方案三:
是同一个a
解决方案四:
因为你用super关键字,所以是同一个a
解决方案五:
super(a)传到父类的一个参数的构造方法,在构造方法里面得到子类传过来的参数,this.a=a是把传过来的参数赋值给成员变量。
解决方案六:
学习,学习
解决方案七:
是同一个a
解决方案八:
同一个了啊
解决方案九:
看看教材上是怎么说的吧
解决方案十:
应该是同一个啊
解决方案十一:
同一个a吧
解决方案十二:
是同一呀,建议再多看看书,弄清楚继承到底怎么回事
解决方案十三:
一个是父类中的a一个是子类中的a子类继承了父类所以他们地址是一样的输出也就相同了
解决方案十四:
学习,学习
解决方案十五:
子类继承了父类的
其他方案:
首先要说的是属性(域)是不能被覆盖的。然后是子类压根就没有定义a属性,所以肯定是一样的。
其他方案:
因为子类的构造方法在加载的时候会默认调用父类的构造方法....
其他方案:
因为子类的构造方法在加载的时候会默认调用父类的构造方法....
其他方案:
你this是在基类A中的,super是在父类B中的,B是继承A的,这一点搞清楚就知道了
其他方案:
你this是在基类A中的,super是在父类B中的,B又继承A,这点搞懂就知道了
其他方案:
this是当前类,super是调用父类
其他方案:
super就是继承父类的方法,所以是一样的
其他方案:
学习学习
其他方案:
自然是一样的。。。调用了父类的构造方法
其他方案:
自然是一样的。。。调用了父类的构造方法
其他方案:
自然是一样的。。。调用了父类的构造方法
其他方案:
当然都是一样的啦~this.a继承父类方法super.a是调用父类方法都一样结果当就一样
其他方案:
当然一样啦this.a继承父类方法,super.a调用父类方法方法一样结果就一样