A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

JAVA中子类调用父类带参的构造方法时修改了父类的成员变量,但父类的成员变量没有变化?
  1. class A{
  2.         int a;
  3.         A(int i){a=i;}
  4. }
  5. class B extends A{
  6.         int a,b;
  7.         B(int i,int j){
  8.                 super(i);   //  这里修改了父类a的值
  9.                 b=j;
  10.                 a=i+j;
  11.                
  12.         }
  13. }
  14. public class AB {
  15.         public static void main(String args[]){
  16.                 A a1=new A(9);
  17. System.out.println(a1.a);   输出是  9
  18.                 B b=new B(3,5);
  19.                 System.out.println(a1.a);    //  为什么输出还是9,不是应该输出3吗?
复制代码

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

1 个回复

倒序浏览
这是内存空间分配的问题,你的主方法中类型+变量名表示在堆栈中开辟一个空间,new代表在堆中开辟空间放在内存池中。
一个引用绑定一个堆空间,你的主方法中 第一步开辟空间建立绑定机制,这个a1就代表了堆中的a的值为9,你用B的构造方
法调用A中的构造方法,由于存储的是基本数据类型,它会直接放在栈中,那么你的第二次打印依旧绑定在new空间中的。你
可以在a前加个静态static那么他就会存放在常量存储器中,就会打印出来3;

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马