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

继承顺序

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

继承的初始化顺序

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

}

}

我们看一下它的执行顺序:

运行结果为:

c1784785bd11754264564d31f82b6b5b.png

可以看出仅仅是创建了子类对象,但它是先执行了父类的构造方法,然后执行子类的构造方法.我们就能证明当我们创建对象的时候,它是优先创建父类对象,然后创建子类对象

如果对象中有属性,属性和我们的构造方法在初始化的时候哪一个先执行呢

例子如下:

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

}

}

运行结果为:

e4bae2815385a04182ede718b26bf26d.png

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

总结一下:

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

相关阅读

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机连接蓝牙扫码枪_宝马车与手机无法蓝牙连接的技术通报

点击↑上方蓝字关注置顶,懂车,更懂宝马!故障现象:手机电话与车辆无法连接,故障信息显示“设备无法连接”,诊断时输出故障代码:B7F8BB - “无法启动蓝牙”。涉及车型:F40G02 G05 G06 …

gdb tui 安装_GDB 单步调试汇编

之前在看汇编的时候一直是肉眼看GCC -S的结果,缺点是很不直观,无法实时的看到寄存器的值,所以研究了下如何用GDB调试汇编。当然,写这篇文章更重要的一个目的是半年没有写博客了,博客要长草了。^_^调试汇编的需求有几点…

java中的异常处理语句_Java中实现异常处理的基础知识

Java中实现异常处理的基础知识异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况。许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象。例如:数组越界和被0除。源代码示例:packageyanzheng;//…

改变numpy的大小_Numpy入门详细教程

序言:python数据科学基础库主要是三剑客:numpy,pandas以及matplotlib,每个库都集成了大量的方法接口,配合使用功能强大。平时虽然一直在用,也看过很多教程,但纸上得来终觉浅,还是需要…

九年级数学解方程50道_初中数学公式中考知识点总结,初三数学上册,九年级数学上册...

初中数学公式中考知识点总结,初三数学上册,九年级数学上册第二十一章 一元二次方程知识点:一元二次方程的解法1、直接开平方法利用平方根的定义直接开平方求一元二次方程的解的方法叫做直接开平方法,2、配方法配方法是一种重要的数…

java时间规划书_【计算机本科补全计划】Java学习笔记(九) Java日期时间

正文之前终于好像仿佛看完了菜鸟教程的Java课程,感觉自己收获颇丰!很好,Java看完之后正愁如何开始进阶呢!结果发现菜鸟还准备了Java实例这种好东西!简直就是教程界的良心啊 !!!没事&…

与40mhz信道不兼容设置_为什么面包板不适合高频电路

01为什么在面包板上玩射频?方便,当然还是方便。面包板是进行一些电子线路实验构建电路方便的平台。多用于普通数字电路和模拟电路。一旦涉及到高频电路,面面包就有很多方面不太适合了。那么到底哪方面不适合?对于高频信号在面包板…

加载gif_搞笑gif:这啥情况啊?笑容加载不出来了?

这无故的小眼神,我也很无奈呀。。。猫和狗对峙,气势上一定不能输几个菜呀,喝成这样!这啥情况啊?笑容加载不出来了?高手在民间!小青年瞬间变老头!丈母娘来家了,说下班就能…

排序千万级数据_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...

千万级大表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议。从一开始脑海里开始也是火光四现&…

java读取rvt文件数据_Revit二次开发之隐藏API 独立进程读取rvt文件

在项目中需要读取rvt文件,但是因为该格式为非公开格式,其数据需要revit的支持,但批量读取不可能一个一个用revit软件去打开。不过该方法还是需要revit的依赖,速度比开软件快了知道多少1.1. 新建一个控制台项目1.2. 添加Revit API引…

java类快速构造_程序员有什么办法能快速梳理java知识点?有这八张图就够了

一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。1、字符串不变性下面这张图展示了这段代码做了什么String s "abcd";s s.concat(&quo…

uos配置 java 环境变量_CentOS 7.3 环境配置java和tomcat开机启动

Centos7下添加开机自启动服务和脚本 https://blog.csdn.net/GMingZhou/article/details/78677953安装部分参考我的博文,仅参考他的开机启动部分CentOS 7环境配置tomcat7开机启动 https://blog.csdn.net/tiantang_1986/article/details/537049661.安装 jdk-8u5-lin…

react全局方法_前端面试题 ---react

高阶组件相关什么是高阶组件,它有哪些运用?高阶组件就是一个函数,接收一个组件,经过处理后返回后的新的组件;高阶组件,不是真正意义上的组件,其实是一种模式;可以对逻辑代码进行抽离…

get方法请求返回一个文件_一键转换多种文件格式,完全免费,总有一个方法适合你...

相信各位小伙伴平时办公的时候,肯定经常需要对多种文件格式进行转换,但是下面这些非常好用的转换方法,你用过吗?接下来就带各位一探究竟,希望可以帮到你哦!一、迅捷PDF转换器在线版1、文档转换首先我们可以…

jacoco入门_Android jacoco 代码覆盖率测试入门

前言最近同事搞了一个基于 jacoco 统计 Android 代码覆盖率测试的功能,可以统计每天手工测试的代码覆盖率.抱着好奇的心态,自己也学习一下 jacoco,陆陆续续搞了三天终于有点结果了.本文介绍仅仅在源码中加入少量代码就可以完成代码覆盖率覆测试.代码配置build.gradle在 app 目录…

uinty粒子系统子物体变大_Unity的粒子系统(一)基础篇

简介闲来无事,仔细的学习一下粒子系统,也当是给自己做个笔记方便之后进行回顾。引擎版本:Unity2018.3创建一个ParticleSystem创建方式:1、Hierarchy-->Effects-->ParticleSystem第一种创建方式创建结果2、gameObject-->A…

java定义返回码常量_码出规范(四)常量定义

01各位屏幕前的读者朋友大家早上中午晚上凌晨好,本文是《码出规范》专题的第四篇,文中参考阿里巴巴最新发布的《Java开发手册》,结合《springboot2.x独门秘籍》专题中的项目开发进度,学以致用,让你在开发中码出高效&am…

centos下载mysql_python数据分析之路——centos下载并配置mysql与navicat的使用

python数据分析之路——centos下载并配置mysql与navicat的使用在之前的文章中已经说明了如何购买并配置一台自己的服务器,那么在安装完anaconda之后,为了之后方便用Django进行网站开发与数据分析,需要对数据库进行配置,那么在数据…

mysql 解压缩安装_[mysql] MySQL解压缩安装步骤

以前装的MySQL出问题了,只好卸载了。又下载了一个mysql-5.6.24-win32.1432006610.zip。msi文件直接安装就行了。这里需要解压到指定目录,配置后可使用。环境变量配置:在 mysql根目录下修改 my-default.ini :# These are commonly set, remove…

mysql数据库如何创建表_mysql数据库如何创建数据表

mysql数据库创建数据表的方法是:可以通过CREATE TABLE语句来创建,基本语法:【CREATE TABLE ([表定义选项])[表选项][分区选项];】。要注意的是,创建数据表不能使用SQL语言中的关键字。在 MySQL 中,可以使用 CREATE TAB…