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 ...
随机推荐
- devexpress chart 散点图加载并分组显示(可以自定义颜色 同组中的点颜色相同)
this.dChart.Diagram.Series.Clear();//清空图的内容 var groups = result.GroupBy(itm => itm["flag&quo ...
- Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
案例 案例:Laravel 在文章列表中附带上前10条评论?,在获取文章列表时同时把每个文章的前10条评论一同查询出来. 这是典型分区查询案例,需要根据 comments 表中的 post_id 字段 ...
- .net 面向对象程序设计深入](3)UML
1.活动图简介 定义:是阐明了业务用例实现的工作流程. 业务工作流程说明了业务为向所服务的业务主角提供其所需的价值而必须完成的工作. 业务用例由一系列活动组成,它们共同为业务主角生成某些工件. 工作流 ...
- eclipse中对Hadoop项目进行mvn clean install时报错的处理
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) ...
- selenium 截图加上时间戳
思路: 1 新建screenshot文件夹,不存在则创建该目录 2 在screenshot文件夹下新建当日日期文件夹,比如20190110:不存在则创建该目录 3 截图保存到当日文件夹,且截图文 ...
- SkyWalking 为.NET Core
SkyWalking 为.NET Core https://www.cnblogs.com/liuhaoyang/p/skywalking-dotnet-v02-release.html Apache ...
- 元素设置float属性后,其后面的元素的位置问题
分两种情况: .content{ width:350px; height:150px; color:#fff; } .content1,.content2{ background-color: #00 ...
- Jenkins传参修改jmeter的报告名称和详细报告地址
目前已经可以发送邮件了,我已经配置了Jenkins,但是有几个显示问题,待处理1.报告名称地址, 2详细报告地址没有做跳转 更改后为: 修改url 1.打开样式的jmeter-results-deta ...
- hdu-1395 2^x mod n = 1---求阶(欧拉函数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1395 题目大意: 题目中给出输入一个整数n,要求一个最小整数的x,使得2^x mod n=1; 解题 ...
- Django Url设计 小知识点
mysite/news/urls.py: from django.conf.urls import url from . import views urlpatterns = [ url(r'^art ...