子类的初始化过程、内存结构
来源:互联网 发布:seo关键词排名优化 编辑:程序博客网 时间:2024/06/08 03:05
一、首先先看引例
public class Father { public Father() { say(); } public void say() { System.out.println("I'm father"); } }
public class Son extends Father{ private int i = 11; public Son() { } @Override public void say() { System.out.println("I'm son " + i); } }
public class Test { public static void main(String[] args) { Son son = new Son(); }}
打印如下:
二、分析
首先要明确一点,类和【加载】和【初始化,又称实例化】不是一个概念,
- 类加载后并不一定实例化,但是类初始化前需要先被加载。
-
- 对于上面这个程序,请问【 Father会被初始化吗?】
- 下面开始分析:
- ①类加载器加载Test类到方法区。
- ②开始执行main方法,main方法入栈。
- ③由程序计数器获取第一条指令。
- ④new Son();
- –>需要初始化Son,但是由于Son继承Father,所以类加载器先加载Father到方法区。
- 并在new Son()的堆内存中分一部分用来保存继承自父类Father的成员变量信息,暂称为子类父空间。
- –>然后加载Son到方法区。调用父类的构造方法,调用自己的构造方法。
-
- 我们知道:
- ①子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。
②子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。
总结:相同的方法会被重写,变量没有重写之说,如果子类声明了跟父类一样的变量,那意味着子类将有两个相同名称的变量。一个存放在子类对象中,一个存放在子类父空间中。父类的private变量,也会被继承并且初始化在子类父对象中,只不过对外不可见。所以,子类和父类的方法都是放在子类对象的内存中,而不是子类父空间中。
其实对于Father类来说,不也可以说的被初始化了吗?被Son对象初始化了?
0 0
- 子类的初始化过程、内存结构
- 子类初始化的过程
- Java:子类的初始化的过程
- Java内存结构、类的初始化、及对象构造过程
- java继承中父类、子类的初始化过程
- Java中子类对象初始化的过程
- 父类子类初始化过程的讨论
- java子类实例初始化过程
- 对象的初始化过程(包含父类的子类)
- java子类和父类的初始化过程
- Java 父类子类的对象初始化过程
- Java学习笔记(十三):关于子类初始化的过程
- Java 父类子类的对象初始化过程及例子
- 使用继承时,子类对象的初始化过程
- Java 父类子类的对象初始化过程
- 继承初始化父类和子类的过程
- 黑马程序员--java中父类和子类都有构造方法时,子类对象的初始化过程
- DDR3内存详解,存储器结构+时序+初始化过程
- oracle杀掉被锁住的进程
- 关于Linux的认识和基本指令
- composer 安装
- 菜鸟搭建Java环境的阿里云CentOS 7服务器所需要知道的一切(一):JAVA & FTP
- 安卓开发中制作圆角
- 子类的初始化过程、内存结构
- Java中堆内存和栈内存详解
- 大型文档的编辑过程
- js的url传递中文参数乱码的解决方案
- 机器学习(周志华)_第六章 支持向量机
- Mavlink地面站编写之–协议分析
- 安卓textview设置文本中个别文字的颜色
- 浅谈jQuery的链式调用
- double类型数据在内存中中存储格式