Java中子类对象初始化的过程
Java中的继承机制看似简单,实际上包含了很多细节。最近在刷题过程中屡屡跳坑,于是自己仔细再学习了一下Java中子类初始化的细节,与大家分享。
class Father
{
Father(){};
}
class Child extends Father
{
super(); //隐式地调用父类构造函数,对父类进行初始化
int age = 10;
Child(){};
}
以以上代码为例:
若执行Child child = new Child();
(1)首先对子类变量进行初始化(int age=0);
(2)执行子类Child构造函数中的隐式super(),调用父类构造函数对父类进行初始化;
(3)执行子类Child构造函数中的其余部分,对子类进行初始化;
(4)对子类变量进行初始化(child.age = 10)
下面我们用一个例子,结合多态来详细说明该初始化过程:
class Father
{
Father()
{
show();
}
void show()
{
System.out.println("father");
}
} class Child extends Father
{
int age = 9;
Child()
{
//隐式super();
System.out.println("child"+age);
}
void show()
{
System.out.println("show"+age);
}
} public class ChuShiHua
{
public static void main(String[] args)
{
Father child = new Child();
}
}
(1)执行Child child = new Child();时:首先默认初始化child.age = 0;(int类的默认初始化值为0)
(2)执行Child类的构造器,首先执行其中的隐式super(),于是执行父类Father的构造器,执行函数体中的show()’
(3)因为多态机制,子类中也有show(),所以执行子类中的show(),输出show0
(4)父类初始化完毕,接着对子类中的变量赋值(child.age=9)
(5)接着执行子类构造器中的语句,输出child9
所以最后的输出是:
show0
child9
在分析此类问题时要特别注意子类在执行构造器时会先执行一个隐式的super()
这意味着子类调用构造器时要先执行父类的无参数构造器对父类进行初始化,如果父类没有无参构造器,则会出现如下编译错误:

Java中子类对象初始化的过程的更多相关文章
- Java中子类对象赋值给父类变量
1. 在Java中将一个字类对象赋值给父类变量是合法的,这也是实现多态(即方法的动态分派)的前提条件之一. 2. 在Java中父类赋值同样也适用于数组.可以将一个子类数组赋值给一个父类数组变量.但可能 ...
- Java类与对象初始化的过程(一道经典的面试题)
本文不再以ClassLoader的视角解释这些问题. 首先,Java代码有个特点,就是成员变量可以在前面的方法中使用,在后面定义.这一特性,很多人说Java了不起,可是为什么呢?Java为何能够这样呢 ...
- Java中的成员初始化顺序和内存分配过程
Java中的成员初始化顺序和内存分配过程 原帖是这样描述的: http://java.dzone.com/articles/java-object-initialization?utm_source= ...
- 【Java基础】Java中new对象的过程
序言 联系我上次写的关于Java内存的文章,对象访问在 Java 语言中无处不在,是最普通的程序行为,但即使是最简单的访问,也会却涉及 Java 栈.Java 堆.方法区这三个最重要内存区域之间的关联 ...
- java 子类对象实例化的过程
大家往往听说 子类继承了父类就有了父类中的所有的非私有的属性,但是怎么就有了父类的属性了呢 ?且听下面分解 子类对象实例化的过程: 1 从结果上来看:(继承性) 子类继承了父类以后 就获取了父类中声 ...
- JAVA 对象初始化的过程
对象初始化的过程例:Student S = new Student();1.因为new Student()用到了Student类,所以会把它从硬盘上加载进入内存2.如果有static静态代 ...
- JAVA中JavaBean对象之间属性拷贝的方法
JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...
- JAVA中子类会不会继承父类的构造方法
声明:刚刚接触java不久,如果理解有错误或偏差望各位大佬强势批判 java中子类能继承父类的构造方法吗? 父类代码: class Father { String name ; //就不set/get ...
- java中子类与基类变量间的赋值
Java中子类与基类变量间的赋值 子类对象可以直接赋给基类变量. 基类对象要赋给子类对象变量,必须执行类型转换, 其语法是: 子类对象变量=(子类名)基类对象名; 也不能乱转换.如果类型转换失败Jav ...
随机推荐
- 学会使用box-sizing布局
盒子模型 关于CSS重要的一个概念就是CSS盒子模型.它控制着页面这些元素的高度和宽度.盒子模型多少会让人产生一些困惑,尤其当涉及到高度和宽度计算的时候.真正盒子的宽度(在页面呈现出来的宽度)和高度, ...
- Win10 安装SqlServer2012 无法访问数据库
win10系统,安装好vs2017,sqlserver2012, 在abp 执行 Update-Database 会出错 具体解决办法是SqlServer2012的1433端口没打开. 打开办 ...
- 操作 实例 / dom
响应式:数据改变时会触发其他联动.例如:模板中的数据绑定:计算属性的重新计算: ---------------------------------------------------- vm.$par ...
- LevelDB源码分析-Write
Write LevelDB提供了write和put两个接口进行插入操作,但是put实际上是调用write实现的,所以我在这里只分析write函数: Status DBImpl::Write(const ...
- ISO 2501 quality model division 学习笔记
作为一个测试,学习质量模型,能够帮你 在测试设计的时候,从多个角度来思考测试用例的设计.而不仅仅是从 功能上, 同时 需要结合自己的产品,选择自己的侧重点,譬如我们公司的产品,安全性这一块 就比较小, ...
- ansible简介,简单实用
Ansible ansilbe是实现自动化运维的工具,基于python开发,实现批量系统配置,批量程序部署,批量运行命令等功能. ansible是基于模块工作的,自身是没有批量部署的能力.真正具有批量 ...
- 使用pip安装包提示TLS证书错误解决办法
最近有在使用pip安装python包的时候,总会出现以下类似的错误: Could not fetch URL https://pypi.python.org/simple/pytest-xdist/: ...
- hdu 3065 AC自动机 标记数组不清零
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065 题目里面要我们计算每种单词出现的次数,重叠的也要计算,那么我们在查找的时候不要把标记单词结尾的 ...
- Android辅助开发工具合集
https://github.com/389273716/android-skill-summary/blob/master/开发工具使用指南/辅助开发工具.md
- Python校验文件MD5值
import hashlib import os def GetFileMd5(filename): if not os.path.isfile(filename): return myHash = ...