Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。

public class FatherTest {

private String name;

FatherTest(){

System.out.println("--父类的无参构造函数--");

}

FatherTest(String name){

this.name=name;

System.out.println("--父类的有参构造函数--"+this.name);

}

static{

System.out.println("--父类的静态代码块--");

}

{

System.out.println("--父类的非静态代码块--");

}

public void speak(){

System.out.println("--父类的方法--");

}

}

加入一个main程序后

public static void main(String[] args) {

System.out.println("--父类主程序--");

FatherTest father=new FatherTest("父亲的名字");

father.speak();

}

执行结果为:

--父类的静态代码块--

--父类主程序--

--父类的非静态代码块--

--父类的有参构造函数--父亲的名字

--父类的方法—

可以很明显的看出来执行顺序:静态代码块—主程序—非静态代码块—构造函数—一般方法。

如果加入子类的继承以后,情况就会变得复杂些。比如我们再新建一个测试子类。

public class SonTest extends FatherTest {

private String name;

static{

System.out.println("--子类的静态代码块--");

}

{

System.out.println("--子类的非静态代码块--");

}

SonTest(){

System.out.println("--子类的无参构造函数--");

}

SonTest(String name){

this.name=name;

System.out.println("--子类的有参构造函数--"+this.name);

}

@Override

public void speak(){

System.out.println("--子类Override了父类的方法--");

}

}

然后再加入一个main函数

public static void main(String[] args) {

System.out.println("--子类主程序--");

FatherTest father=new FatherTest("父亲的名字");

father.speak();

SonTest son=new SonTest("儿子的名字");

son.speak();

}

执行结果为:

--父类的静态代码块--

--子类的静态代码块--

--子类主程序--

--父类的非静态代码块--

--父类的有参构造函数--父亲的名字

--父类的方法--

--父类的非静态代码块--

--父类的无参构造函数--

--子类的非静态代码块--

--子类的有参构造函数--儿子的名字

--子类Override了父类的方法--

加入了子类以后,执行顺序有了新的变化,我们可以总结一下。首先第一部分执行的是父类的静态代码块—子类的静态代码块—主程序。这一部分都是执行一次,与建立多少对象没有关系。第二部分new了一个父类对象,并调用了方法。执行了它的非静态代码块—构造函数—一般方法。第三部分new了一个子类的对象,并调用了方法。执行顺序为父类的非静态代码块—父类的无参构造函数,然后是子类的非静态代码块—子类构造函数—子类的方法。

java继承父类执行顺序_java中子类继承父类程序执行顺序问题相关推荐

  1. java继承怎么老是出错_java中子类继承父类时总是出错怎么回?

    权限public > 包(package,默认,也就是什么权限修饰符都不加) > proteced > private 子类继承了父类的所有成员(这样说实际是不对的),但只能访问父类 ...

  2. insert时调用本身字段_java中子类调用父类构造方法注意事项

    protected继承 继承有个特点,就是子类无法访问父类的private字段或者private方法.例如,Student类就无法访问Person类的name和age字段: class Person ...

  3. php 中如何重载父类的方法_PHP中子类重载父类的方法【parent::方法名】

    在PHP中不能定义重名的函数,也包括不能再同一个类中定义重名的方法,所以也就没有方法重载.单在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法 ...

  4. java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...

    今天学习Java三大特征之一:继承的时候,产生了一些疑问,最后通过网上查找和各位网友的帮助,终于拔开云雾见日出.下面进入正题: 首先:子类对象拥有父类中的所有属性和方法:在这里,很多人会问构造器可以继 ...

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

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

  6. java不能覆盖父类的_java中子类覆盖父类方法所必须满足的条件

    一.描述 子类重写(覆盖)父类的方法必须满足的条件: 1.父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用super关键字来访问父类中的被重写的方法), 如果父类中的方法为pr ...

  7. JAVA子类和父类在同一个包中,子类和父类在同一个包中继承性

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 请问在同一个包中和在同一个源文件有什么区别?????? 以下子类和父类在同一个源文件中,如何保存为在同一个包中? class Father { priva ...

  8. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  9. python中子类调用父类的初始化方法

    http://bestchenwu.iteye.com/blog/1044848 http://www.crazyant.net/1303.html 一直不太理解python的初始化方法,今天找了下资 ...

最新文章

  1. python之⾯向对象基础
  2. 迭代器、for循环本质、生成器、常用内置方法整理
  3. 最长回文子串和回文链表
  4. java简述会话对象的生命周期_简述Java Web三大作用域对象
  5. UVa1607 poj1435 UVaLive1686 Gates
  6. Oracle中的Round和Trunc
  7. 【kafka】Failed to allocate.memory within the configed max blocking time
  8. 【CMAKE】 is not able to compile a simple test program.
  9. 检测React组件外部的点击
  10. halcon 仿射变换和区域跟随
  11. 叶片制成切片的结构示意图_更集成的发动机!洞悉UTC 3D打印整体式半叶片
  12. iOS NSData简单解析
  13. python 教程 第十章、 输入/输出
  14. 教你配置赏心悦目的开发神器 Atom-郭永峰-专题视频课程
  15. 苹果手机微信语音没声音怎么回事_iPhone XS Max相机、普通照片模式下拍照没声音怎么办?...
  16. 常用的企业邮箱有哪些?企业邮箱有哪几种?
  17. oracle 按天数 均值,oracle 按天数统计数据
  18. C++ reverse()函数用法详解(深入了解,一文学会)
  19. 吉大计算机学院宣讲,计算机科学与技术学院“喜迎十九大,争做学校宣传员”寒假社会实践系列报道(十六)...
  20. python做股票系统_GitHub - pustar/stock: stock,股票系统。使用python进行开发。

热门文章

  1. 【连载】如何掌握openGauss数据库核心技术?秘诀四:拿捏事务机制(3)
  2. 今晚8点,Oracle ACE男神Roger详解Oracle中为什么没有double write?
  3. 文档下载:《Oracle 20c和19c的新特性解密》
  4. 这两个小技巧,让SQL语句不仅躲了坑,还提升了1000倍
  5. 线性表、顺序表和链表,你还分不清?
  6. 伯克利:serverless是下一代计算范式
  7. 【华为云技术分享】手把手教你如何在ARM上源码编译Redis
  8. 【华为云技术分享】浅谈服务化和微服务化(上)
  9. 网络服务家族图谱:一张图带您了解华为云网络服务大家族!【华为云分享】
  10. 窥探日志的秘密【华为云分享】