黑马程序员--03.面向对象--02.子类和父类成员变量的关系【个人总结】

来源:互联网 发布:东华软件股票怎么样 编辑:程序博客网 时间:2024/06/10 05:18

子类、父类成员变量的关系

----------- 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内存中的方法区。因此,FuZi全部加载到内存之后,两个类的函数成员的代码存储到方法区中。以供JVM调用。

[2]. 子类、父类成员变量全部存放在子类的内存区域

个人感悟:继承的含义字面理解就是:

{1}. 儿子从父亲的那边继承父亲的财产 (Java中父类的成员变量相当于财产)

{2}. 儿子从父亲的那边学会父亲做事的方法 (Java中父类的成员函数相当于父亲办事的方法)

{3}. 继承体现的是:财产做事方法传承,而不是父亲这个实体被儿子据为己有

{4}. 继承之后儿子就可以把父亲类的财产方法据为己有!!所以实例化子类之后,财产是父类的成员变量一定要据为己有!!所以有上面的结论:子类、父类成员变量全部存放在子类的内存区域

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------