黑马程序员技术交流社区
标题:
JAVA中子类调用父类带参的构造方法时修改了父类的成员变量,但父类没有变化?
[打印本页]
作者:
Mr.Z.Lee
时间:
2013-11-8 20:36
标题:
JAVA中子类调用父类带参的构造方法时修改了父类的成员变量,但父类没有变化?
JAVA中子类调用父类带参的构造方法时修改了父类的成员变量,但父类的成员变量没有变化?
class A{
int a;
A(int i){a=i;}
}
class B extends A{
int a,b;
B(int i,int j){
super(i); // 这里修改了父类a的值
b=j;
a=i+j;
}
}
public class AB {
public static void main(String args[]){
A a1=new A(9);
System.out.println(a1.a); 输出是 9
B b=new B(3,5);
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