代码:

package com.company;public class Main {public static void main(String[] args) {new MyClass();}
}class Test {Person person = new Person("Test");static{System.out.println("test static");}public Test() {System.out.println("test constructor");}
}class Person{static{System.out.println("person static");}public Person(String str) {System.out.println("person "+str);}
}class MyClass extends Test {Person person = new Person("MyClass");static{System.out.println("myclass static");}public MyClass() {System.out.println("myclass constructor");}
}

结果:

test static
myclass static
person static
person Test
test constructor
person MyClass
myclass constructor

========================================================

默认构造函数与有参数构造函数

代码:

public class Main {public static void main(String[] args) {new Child("mike");}}
class People {String name;public People() {System.out.print(1);}public People(String name) {System.out.print(2);this.name = name;}
}class Child extends People {People father;public Child(String name) {//super(name);System.out.print(3);this.name = name;father = new People(name + ":F");}public Child() {System.out.print(4);}
}

结果:

132

View Code

考察的又是父类与子类的构造函数调用次序。在Java中,子类的构造过程中必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来。但如果父类有多个构造函数时,该如何选择调用呢?

第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法(就是没有参数的构造方法),但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是如果在子类构造方法中我们并没有显示的调用基类的构造方法,如:super();  这样就会调用父类没有参数的构造方法。

第二个规则:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数,此时无参的构造函数就不会被调用。

总之,一句话:子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。

如果取消注释中的代码,那么结果就是232

==========================================================================================

代码:

public class Main {public static void main(String[] args) {new Dervied();}}class Dervied extends Base {private String name = "dervied";public Dervied() {tellName();printName();}public void tellName() {System.out.println("Dervied tell name: " + name);}public void printName() {System.out.println("Dervied print name: " + name);}
}class Base {private String name = "base";public Base() {tellName();printName();}public void tellName() {System.out.println("Base tell name: " + name);}public void printName() {System.out.println("Base print name: " + name);}
}

结果:

Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied

View Code

原因:

1、首先private是不会继承到新的对象里,所以不会出现“base”。
2、由于重写的缘故,在执行super的构造函数是,还是调用的子类方法,此时成员变量未初始化。

https://www.cnblogs.com/sylz/p/5758990.html

Java 继承 执行顺序相关推荐

  1. java 继承执行顺序

    java 中 继承的 执行 顺序 public class A {public A(){System.out.println("A 无参");}public A(int a){Sy ...

  2. Java中继承执行顺序

    目录 继承执行顺序 类中的资源分类: 在子类中创建main方法 在无关类中创建main方法 拓展 代码块 权限修饰符 继承执行顺序 类中的资源分类: 静态成员变量, 静态代码块, 静态方法, 非静态成 ...

  3. Java代码执行顺序

    Java代码执行顺序 1. Java初步认知 2. Javayun.java例子 3. 反编译Javayun.class文件 4. 分析Javayun_dxdump文件 5. 再来一个网上的例子Jav ...

  4. java继承执行子类输出顺序_JAVA继承顺序

    当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执行的呢,也就是说我们需要关 ...

  5. Java构造函数执行顺序

    首先执行基类的构造函数 然后执行派生类的构造函数之外的初始化语句 最后执行派生类的构造函数 在Java中,如果派生类构造函数需要调用基类的构造函数,那么基类构造函数必须作为派生类构造函数的第一句话.在 ...

  6. java程序执行顺序

    一直都常听同学们和老师们讲过一些关于java程序中的一些执行流程和执行顺序,从来也没自己系统的总结过.今天突来兴趣,总结一下,也算给自己做了学校笔记. 一.首先在了解程序的一些加载顺序流程开始前,首先 ...

  7. java for 执行顺序_java – @BeforeMethod和继承 – 执行顺序(TestNG)

    If I have class A and a class B extends A and both have one @BeforeMethod method, then will the pare ...

  8. java 继承先后顺序_Java中的继承关系的加载顺序

    /* 在加载类时,Java虚拟机先加载父类再加载子类,再对静态初始化块. 静态成员变量(类变量).静态方法进行一次初始化. 只有调用new方法时才会创建类的对象.按照父子继承关系进行初始化, 首先执行 ...

  9. Java类加载执行顺序

    当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现这个类进行初始化. 一.加载 加载,是指Java虚拟机查找字节流(查找.class文件),并且根据字节流创建j ...

最新文章

  1. 开源应用架构之​Selenium WebDriver讲解
  2. seaborn系列 (4) | 分类图catplot()
  3. 10进制与16进制之间的转换 delphi
  4. date oracle 显示毫秒_oracle数据库to_date日期格式化到毫秒 | 学步园
  5. AJAX的安全性及AJAX安全隐患
  6. java排序方法调用_Java实现顺序查找、二分查找、冒泡排序、方法调用
  7. 元宵节电商促销首页设计PSD分层模板
  8. aix查看文件夹大小命令_轻松掌握 Linux 命令(1):ls 命令
  9. c# 取余数 浮点数_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源
  10. 论文阅读:Natural Language Processing Advancements By Deep Learning: A Survey
  11. 几个知识蒸馏相关的BERT变体
  12. Hamcrest 精萃
  13. 苹果id登陆不上去怎么回事_shopee虾皮台湾站 app怎么登陆不上去,shopee虾皮台湾站app最新版...
  14. iphone邮件服务器 263,在iphone上怎么设置263邮箱
  15. Python小白的数学建模课-21.关键路径法
  16. 微信小程序之——实现一行滑动显示很多文字-scroll-view
  17. 为什么每个人都该知道阿兰·图灵?
  18. IBM AppScan 安全扫描报告中部分问题的解决办法
  19. 西门子s7—200smart型PLC和昆仑通泰触摸屏程序
  20. android shap,Android中Shape的用法详解

热门文章

  1. 车联网系统会不会只是智能手机系统的翻版?
  2. 工业4.0进行时:未来协作方式的变革
  3. 深度学习综述:Hinton、Yann LeCun和Bengio经典重读
  4. 中国倒数第五!毕马威全球自动驾驶报告|附下载
  5. 未来智能实验室成立,建设世界第一个智能系统智商评测和趋势研究机构
  6. 程序员的“凡尔赛文学”大赏!
  7. 单行文字垂直/水平跑马灯效果
  8. WCF 设计和实现服务协定(01)
  9. 对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
  10. 小米 Play 发布:CPU+GPU 双 Turbo,每个月送 10 GB 流量