Java学习笔记二十三:Java的继承初始化顺序
Java的继承初始化顺序
当使用继承这个特性时,程序是如何执行的;
继承的初始化顺序
1.初始化父类再初始子类
2.先执行初始化对象中属性,再执行构造方法中的初始化
当使用继承这个特性时,程序是如何执行的呢,也就是说我们需要关注继承的初始化顺序,当我们创造一个对象的时候,所执行的构造方法就相当于初始化一个对象,所以如果我们需要证明初始化一个对象的时候,它是不是会先初始化父类,然后初始化子类
初始化其实就相当于执行类的构造方法,所以我们只需要重写构造方法,在类的构造方法中输出一句话,看它到底是什么时候输出的,就知道他们的执行顺序了
举个例子:
Animal类:
package com.test;
public class Animal {
public int age;
public String name;
public void eat(){
System.out.println("动物是可以吃东西的");
//这里的父类只是描述动物可以吃东西
}
public Animal(){
System.out.println("Animal类执行了");
}
}
Dog类:
package com.test;
public class Dog extends Animal{
public Dog(){
System.out.println("Dog类执行了");
//我们在Dog类定义一个无参的构造方法
}
}
主函数Initail类:
package com.test;
public class InitailClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog d = new Dog();//主函数里只是创建了子类对象
d.age = 10;
d.name = "xiaotian";
d.eat();
}
}
我们看一下它的执行顺序:
运行结果为:

可以看出仅仅是创建了子类对象,但它是先执行了父类的构造方法,然后执行子类的构造方法.我们就能证明当我们创建对象的时候,它是优先创建父类对象,然后创建子类对象
如果对象中有属性,属性和我们的构造方法在初始化的时候哪一个先执行呢
例子如下:
Animal类:
package com.test;
public class Animal {
public int age=10;//为属性赋初值
public String name;
public void eat(){
System.out.println("动物是可以吃东西的");
//这里的父类只是描述动物可以吃东西
}
public Animal(){
System.out.println("Animal类执行了");
age = 20;//在执行构造方法的时候再为age赋一个值
//如果在程序中输出这个值,这个值其实应该是后一个的值,因为后面赋的值会把前面的覆盖掉
}
}
主函数Initail类:
package com.test;
public class InitailClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建父类对象animal
Animal animal = new Animal();
System.out.println("animal age:"+animal.age);
Dog d = new Dog();//主函数里只是创建了子类对象
d.age = 10;
d.name = "xiaotian";
d.eat();
}
}
运行结果为:

显然构造方法的初始化方式是后执行的,所以属性的初始化是先执行的:
总结一下:
当我们创建一个子类对象的时候,先创建父类的属性进行初始化,然后执行父类的构造方法,接着执行子类的属性进行初始化,最后执行子类的构造方法。
Java学习笔记二十三:Java的继承初始化顺序的更多相关文章
- Java学习笔记二十一:Java面向对象的三大特性之继承
Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...
- Java基础学习笔记二十三 Java核心语法之反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...
- Java学习笔记二十:Java中的内部类
Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...
- Java学习笔记二十七:Java中的抽象类
Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- Java学习笔记心得——初识Java
初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...
- Java学习笔记之:Java 继承
一.引言 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解为一个对象从另一个对象获取属性的过程. 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类 ...
- 【Java学习笔记之十三】初探Java面向对象的过程及代码实现
理解Java面向对象的重要知识点: 一. 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的.红色的.白色的... 这里,汽车设计图就是我们说的类(class ...
随机推荐
- js创建对象的几种方式 标签: javascript 2016-08-21 15:23 123人阅读 评论(0)
1.传统方法,创建一个对象,然后给这个对象创建属性和方法. var person = new Object(); person.name = "张三"; person.age = ...
- GO语言(五)项目搭建
<sorter> |------<src>(手动添加,代码存放处) |------sorter.go |------<algorithm> |--- ...
- Android Studio使用GIt提交代码到本地仓库后没有Push,如何回退保存
当在AS中使用Git来提交代码时,有时候我们不注意的情况下会把不想提交的文件或文件夹(比如\build下的)提交到本地仓库,如果此时并没有Push到远程仓库的话.如果让本地仓库的提交回退并且保存之前的 ...
- 推荐一个非常好用的Chrome扩展应用,用于美化Json字符串
这个Chrome扩展应用的名称叫JSON Viewer Awesome 1.0.6: 安装之后,在Chrome工具栏会出现一个紫色的小图标: 然后可以把任意Json字符串直接贴到Chrome界面里: ...
- ranger文件管理器
我是一个 CLI 控,但一直苦于没有一个好用的文件管理器.虽然 vifm 的 vim 键绑定很合我的胃口,但它实在不好用.所以我一直没有停止过寻找类似软件的念头.直到尝试了 Ranger, 觉得很不错 ...
- 小技巧:快速清除项目中的svn相关文件!
习惯使用svn作为源代码管理工具,安全可靠 但是这些.svn字样的文件夹及文件也会随着源代码一同被deploy到Tomcat中,除了看着碍眼,也会占用Tomcat的性能 每次都是在项目部署目录里,搜索 ...
- Java 和 .NET SHA1算法记录
最近做了一个.NET访问Java接口的小Demo,其中用到了SHA1加密,大体思路就是.NET 传一些参数然后SHA1加密,Java端接收到之后在SHA1加密对比. Java代码: public fi ...
- 可枚举接口的知识点(IEnumerable 接口)要使用foreach,就必须实现可枚举接口
- 解决iOS项目根目录下文件乱七八糟的问题
对于一个刚做项目的新手来说,肯定会碰到一个相当蛋疼的问题,那就是你在项目中建立的文件夹与你在根目录下的文件夹完全对应不起来,说直接点就是你通过group的方式在项目中建立的文件夹在本目录下根本就没有. ...
- 安装jdk1.7
1.压缩文件放到/usr文件夹里 2.解压到 /usr里,tar -zxvf jdk-7u71-linux-i586.tar.gz 3.配置jdk环境变量,打开/etc/profile配置文件,将下面 ...