黑马程序员技术交流社区

标题: JAVA中子类调用父类带参的构造方法时修改了父类的成员变量,但父类没有变化? [打印本页]

作者: Mr.Z.Lee    时间: 2013-11-8 20:36
标题: JAVA中子类调用父类带参的构造方法时修改了父类的成员变量,但父类没有变化?
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吗?
复制代码

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2