继承顺序

当使用继承这个特性时,程序是如何执行的;

继承的初始化顺序

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();

}

}

运行结果为:

显然构造方法的初始化方式是后执行的,所以属性的初始化是先执行的:

总结一下:

当我们创建一个子类对象的时候,先创建父类的属性进行初始化,然后执行父类的构造方法,接着执行子类的属性进行初始化,最后执行子类的构造方法。

相关阅读

把姓名按照姓氏笔画排序,这是在实际工作中经常回遇到的,使用过Excel的朋友都知道Excel中默认的排序方式是拼音排序,现在的问题是如何

最近有在做一个初始化设备的动作,但是发现在相同的文件夹下已经有两个module_init,当我想再添加一个时,发现我添加的这个是最后执行

ATM机问题域及词汇表:https://blog.csdn.net/ashdkl/article/details/80510951ATM机用况图:https://blog.csdn.net/ashdkl/article

队列也是一种线性表,是一种先进先出的线性结构。队列只允许在表的一端进行插入(入队)、删除(出队)操作。允许插入的一端称为队尾,允

fill:填充的意思stroke:笔的意思,可理解为为strokeRect是画框框的fillStyle要写在fillRect之前,可以理解为,先选好颜色再画图(就像画

java继承调用先后_「继承顺序」JAVA继承顺序 - seo实验室相关推荐

  1. java 线程间通信方式_「转」JAVA多线程之线程间的通信方式

    1. 同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public class MyObject { synchronized public void m ...

  2. java类初始化顺序_「漫画」Java中的父子类的执行顺序到底是怎么一回事?

    ----下课后---- 结论 类的加载顺序. (1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法) (2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 ) (3) ...

  3. java 平均分配算法_「角平分线」Java 计算角平分线 - seo实验室

    角平分线 有三个点,计算出角平分线.首先要算出两个点之间的方位角,根据方位角算出夹角.下面以角平分线长度是20示例计算. double dStartAngle = Math.atan2(mdE1 - ...

  4. java 过滤器执行图_「filterchain」java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序 - seo实验室...

    filterchain 过滤器拦截到请求之后,首先是执行doFilter()方法中chain.doFilter()之前的代码,然后放弃权限给下一个过滤器或者serverlet等等,最后才执行chain ...

  5. python海伦公式_「海伦公式」海伦公式: - seo实验室

    海伦公式 l为半周长,s为面积 float l = (a + b + c) / 2; float s = sqrt(l*(l - a)*(l - b)*(l - c)); 文章最后发布于: 2018- ...

  6. iview template模式_「iview」iview_入门 - seo实验室

    iview 执行npm install iview --save 在项目中引入iview 引入 iView # 一般在 webpack 入口页面 main.js 中如下配置: import iView ...

  7. java简单编程_「4」Java简单编程

    1.第一个Java程序 ●Java程序开发步骤: ●通过文本编辑器来编写java代码至扩展名为java的文件中. ●调用编译工具javac.exe来对java源文件进行编译,生成扩展名为class的字 ...

  8. java tcp权限控制_「图解」TCP重传、滑动窗口、流量控制、拥塞控制

    前言 前一篇35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的. 来了,今天又来图解 TCP 了,小林可能会迟到,但不会缺席. 迟到的 ...

  9. java小程序例子_「小程序JAVA实战」java的聚合项目搭建(30)

    做了多年的开发,原来很多项目都是一个项目一个工程,如果用到其他的项目的依赖文件的时候的,直接手动copy过来就可以了,自从有了maven后,很多开源的项目和互联网公司都开始使用maven来构建聚合项目 ...

最新文章

  1. RISC-V会被卡吗?那么你觉得C语言会不会被卡? | 包云岗
  2. 使用google云(GCP)二次利用安装kali Linux(kali browser)
  3. 从性能方面谈系统设计
  4. Java面试中与源码有关的问题分享
  5. Java---形参个数可变的方法
  6. SAP Analytics Cloud关于Smart Predict功能的说明
  7. 新!详细!win10下MySQL数据库干净卸载安装与配置
  8. [vue] 说下你的vue项目的目录结构,如果是大型项目你该怎么划分结构和划分组件呢?
  9. 东南大学计算机网络_【20考研】东南大学计算机考研分数统计
  10. 计算机维护教程自学,【电脑维修教程】自学维修电脑.pdf
  11. Extjs EditorGridPanel
  12. 如何缓解百度网盘限速问题
  13. 88E1111 100BASE-T百兆工程(part2--完)
  14. R语言可视化散点图、ggrepel包的geom_text_repel函数避免数据点之间的标签互相重叠(设置segment.square为假以获得斜曲线,segment.inflect设置为真以引入拐点
  15. Vue组件通信:父传子、子传父、跨组件通信
  16. (转)对冲基金:Citadel如何屹立市场20年不倒
  17. 应对百度“清风算法”的策略和方法
  18. 《mysql入门很简单》_《MySQL入门很简单》练习6.9
  19. 提高网站访问速度方案
  20. tvos 刷新焦点_如何为大型团队设置可扩展的iOS / tvOS / watchOS Xcode项目,并避免代码冲突?...

热门文章

  1. 值从哪里来_Linux used内存到底去哪里了呢?
  2. suse linux 11 HBA信息,HP BL660 GEN8 SUSE 11 查询HBA信息 驱动版本 固件版本 设备名称
  3. linux uefi无法启动文件,解决UEFI安装无法启动的问题
  4. 达梦数据库导入oracle数据_达梦数据库助力加速石油石化行业数字化转型升级
  5. win7系统还原在哪​
  6. CAS和Synchronized知识
  7. 前后端分离中的权限管理思路
  8. controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常
  9. SpringBoot升级到2.0后默认时间格式变化_springboot接收date类型参数
  10. linux 远程调试文件夹,GDB远程调试开发板程序