22.3 Extends 构造方法的执行顺序
/*
* 1.有子父类继承关系的类中,创建父类对象未调用,执行父类无参构造
* 2.有子父类继承关系的类中,创建子类对象未调用,执行顺序:默认先调用 父类无参构造---子类无参构造
* 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造
*
* * 为什么要调用父类构造?
* 因为需要给父类的成员变量初始化
* 肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码
* */ 1.创建子类对象,使用子类无参构造,子类无参构造第一行代码没有调用其他构造。
故输出顺序:
父类无参构造---子类无参构造
public class ExtendsFunDemo {
public static void main(String[] args) {
// Dad6 d = new Dad6();
Kid6 k = new Kid6();
}
}
class Dad6 {
public Dad6() {
System.out.println("父类无参构造");
}
public Dad6(String name) {
System.out.println("父类有参构造");
}
}
class Kid6 extends Dad6 {
public Kid6() {
System.out.println("子类无参构造");
}
public Kid6(String name) {
System.out.println("子类有参构造");
}
}
执行结果

2.
* 1.子类构造方法第一行使用this调用该类的有参构造,所以执行顺序:
* (先执行无参中的this即(在执行this中的有参,有参第一行没有调用)父类无参--)子类有参--子类无参
* 2.同理,子类构造第一行使用super调用父类的有参构造,执行顺序:
* (先执行无参中的super即)父类有参---子类无参
public class ExtendsFunDemo2 {
public static void main(String[] args) {
Kid2 k = new Kid2();
}
}
class Kid2 extends Dad6 {
public Kid2() {
this("小明");
// super("大明");
System.out.println("子类无参构造");
}
public Kid2(String name) {
// super("大明");
System.out.println("子类有参构造");
}
}
输出

3.
* 创建子类对象,调用子类的有参构造方法
* 执行顺序:
* (子类构造方法第一行无调用)父类无参---子类有参
* 同理:
* 子类有参第一行调用子类无参(子类无参第一行未调用,先执行父类无参)
* 执行顺序:父类无参---子类无参--子类有参
public class ExtendsFunDemo3 {
public static void main(String[] args) {
Kid3 k = new Kid3("小明");
}
}
class Dad3 {
public Dad3() {
System.out.println("父类无参");
}
public Dad3(String name) {
System.out.println("父类有参");
}
}
class Kid3 extends Dad3 {
public Kid3() {
// super("大明");
System.out.println("子类无参");
}
public Kid3(String name) {
this();
System.out.println("子类有参");
}
}
输出

22.3 Extends 构造方法的执行顺序的更多相关文章
- Java Object 构造方法的执行顺序
Java Object 构造方法的执行顺序 @author ixenos 为了使用类而做的准备工作包括三个步骤 1)加载:类加载器查找字节码(一般在classpath中找),从字节码创建一个Class ...
- java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...
- Java(静态)变量、(静态)代码块、构造方法的执行顺序
Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执 ...
- 静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了。
1.静态代码块 2.构造代码块3.构造方法的执行顺序是1>2>3;明白他们是干嘛的就理解了.1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值.2.构 ...
- 【Java基础】继承中的代码块和构造方法的执行顺序探索
本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题.首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ stati ...
- java中静态代码块,构造代码块,以及构造方法的执行顺序
写了许久的代码,却把一些基础的东西都给忘了,今天无聊就顺手写了个,然后测试下,发现跟我记忆中的竟然有些出入,作为一个两年的开发,我感觉自己很失败啊. 父类pojo: public class Pojo ...
- Java面试题 静态代码块 构造代码块 构造方法 的执行顺序
JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public cl ...
- 1.7Oob封装 继承 访问修饰符 静态和构造方法的执行顺序
1:访问修饰符 private 同类中 默认 同类 同包 protect 同类 同包 子类 public 同类 ...
- Java子父类间静态代码块、非静态代码块、构造方法的执行顺序
子类A继承父类B,A a=new A(); 正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A ...
随机推荐
- Android NDK JNI 入门笔记-day04-NDK实现Hash算法
* Android NDK JNI 入门笔记目录 * 开头 前面的学习,我们已经掌握了 NDK 开发的必备知识. 下一步就要多实践,通过创造问题并解决问题,来增加熟练度,提升经验. 日常开发中,经常会 ...
- Gorm 预加载及输出处理(三)- 自定义时间格式
前言 Gorm 中 time.Time 类型的字段在 JSON 序列化后呈现的格式为 "2020-03-11T18:26:13+08:00",在 Go 标准库文档 - time 的 ...
- Python文本文件读写操作时的字符编码问题
说明:文本文件的字符编码问题只存在t模式中,如:open('a.txt', mode='rt') 编码(encode): 我们输入的任何字符想要以文件(如.txt)的形式保存在计算机的硬盘上, 必须先 ...
- Git在公司内部的使用规范
Git在公司内部的使用规范 目录 Git在公司内部的使用规范 1.版本定义 2.系统开发环境 3. 分支定义 4.Commit 日志规范 5.开发工作流程: 5.1.常规分支debug流程: 5.2. ...
- mac开发错误:errSecInternalComponent
errSecInternalComponent Command CodeSign failed with a nonzero exit code 修改方法: Build Settings -> ...
- IOS抓包工具Stream——让移动端的抓包变得轻而易举
有一天下晚班回家,在地铁上的时候,开发发来信息说,能不能把之前创建的bug再抓包看下数据.顿时心里就想,在地铁上,我上哪抓包去.之后百度了下,发现ios有一款非常实用的抓包工具,大家可以上App St ...
- VScode 快捷键大全
按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick Open Ctrl + ...
- CF1326A Bad Ugly Numbers 题解
原题链接 简要题意: 构造一个长为 \(n\) 的数,使得每位均不为 \(0\),且 \(n\) 不被它的各位数字整除. 比方说, \(n = 239\) 是合法的.因为: \(2 \not | 23 ...
- MySQL优化之避免索引失效的方法
在上一篇文章中,通过分析执行计划的字段说明,大体说了一下索引优化过程中的一些注意点,那么如何才能避免索引失效呢?本篇文章将来讨论这个问题. 避免索引失效的常见方法 1.对于复合索引的使用,应按照索引建 ...
- Nginx Configure
1.主配置/etc/nginx.conf #/etc/nginx/nginx.conf user nginx; worker_processes auto; error_log /var/log/ng ...