子类、父类成员变量的关系
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
继承中子类、父类成员变量的特点
给出一段程序
class Fu{
int num =4;
void hah(){}
}
class Zi extends Fu{
int num =5;
void show(){
System.out.println("super toString:"+ super.toString());
System.out.println("super toString:"+ this.toString());
System.out.println("super num:"+ super.num);
System.out.println("this num:"+ this.num);
}
}
class Test{
public static void main(String[] args) {
Zi zi =new Zi();
zi.show();
}
}
运行结果:
super和this 的toString()打印值都是 Zi@150bd4d 说明这两个引用是指向堆内存中同一个地址。说明,Fu类构建的成员变量全部都存放在子类的堆内存区域中。
(1). 分析继承关系的内存变化图
分析一下内存变化:
[1], 执行Zi zi =new Zi();的时候,使用到了Zi的构造函数,所以此时,Zi.class需要马上进入内存。当装载Zi.class进入内存的方法区的时候,发现Zi extends Fu(后面会知道调用Zi的构造会先去执行Fu的构造,这样就是使用了Fu的构造方法,所以Fu的类文件也要加载到内存) ==>此时Fu.class也被加载到内存的方法区。
【知识点】加载类到内存具体指的是将.class文件的代码等具体信息全部加载到Java内存中的方法区。因此,Fu和Zi全部加载到内存之后,两个类的函数成员的代码存储到方法区中。以供JVM调用。
[2]. 子类、父类的成员变量全部存放在子类的内存区域
【个人感悟】:继承的含义字面理解就是:
{1}. 儿子从父亲的那边继承父亲的财产 (Java中父类的成员变量相当于财产)
{2}. 儿子从父亲的那边学会父亲做事的方法 (Java中父类的成员函数相当于父亲办事的方法)
{3}. 继承体现的是:财产和做事方法的传承,而不是父亲这个实体的被儿子据为己有。
{4}. 继承之后,儿子就可以把父亲类的财产和方法据为己有!!所以实例化子类之后,财产是父类的成员变量一定要据为己有!!所以有上面的结论:子类、父类的成员变量全部存放在子类的内存区域。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------