`
wuzq1223
  • 浏览: 23969 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

(转) 父子类之间构造方法执行与调用的问题

    博客分类:
  • java
 
阅读更多
//假定一个子类Sub,继承自父类Super,那么在实例化Sub,也就是new Sub()时,构造方法是怎么执行的呢,下面的代码解释了这些,很重要 

class Super{ 
    static{System.out.println("静态代码块执行...");} 
    {System.out.println("非静态代码块执行...");} 
    public Super(){System.out.println("父类无参构造执行...");} 
    public Super(int test){System.out.println("父类全参构造执行...");} 

class Sub extends Super{ 
    public Sub(){System.out.println("子类无参构造执行...");} 
    public Sub(int test){System.out.println("子类全参构造执行...");} 

class SubTest extends Super{ 
    public SubTest(){//子类无参构造,显调父类有参构造 
        super(1); 
        System.out.println("子类无参构造执行");} 
    public SubTest(int test){ 
        super(1); 
        System.out.println("子类全参构造执行..."); 
    } 

public class Test{ 
    public static void main(String[] args) { 
//      实例化子类,无参构造 
        Sub s=new Sub(); 
         
        //实例化子类,全参构造 
        Sub s1=new Sub(1); 
         
        System.out.println("********华丽分割线********"); 
        //实例化子类,无参构造 
        SubTest ts=new SubTest(); 
         
        //实例化子类,全参构造 
        SubTest ts1=new SubTest(1); 
    } 

输出:

静态代码块执行...
非静态代码块执行...
父类无参构造执行...
子类无参构造执行...
非静态代码块执行...
父类无参构造执行...
子类全参构造执行...
********华丽分割线********
非静态代码块执行...
父类全参构造执行...
子类无参构造执行
非静态代码块执行...
父类全参构造执行...
子类全参构造执行...
也就是,在实例化子类时(当然子类必有父类,不解释),先执行父类的构造方法,如果在子类的构造方法中没有显式调用父类的具体构造,那么编译器会默认执行无参构造

,如果子类的构造中明确了调用的是父类的具体(比如有参有参构造),那么执行的就是父类的那个构造:就是说,子类实例化时,必须执行父类的一种构造(如果没写,或者没指定是哪个父类构造,编译器默认是父类的无参构造),可以显式的调用super([type param])父类的有参构造完成相关的构造需要...依次类推,父类在执行自己的构造时,又会执行父类的父类的构造,一直到Object的构造,恐怖啊...呵呵

听过一种解释比较合理,就是说当你在实例化一个类时,其父类也实例化,其父类的父类也是如此,直到Object,所以会出现构造的向上不停执行直到public Object(){},代码中还写了代码块,java中的代码块分为静态与非静态两种,在演示中可以看出,静态代码块是最先且仅执行一次的代码,非静态代码块,每次随着父类构造之前执行一次...
分享到:
评论

相关推荐

    21天学通Java-由浅入深

    202 10.3.3 父子类间的构造器的调用流程 204 10.3.4 如何自定义构造器 207 10.4 什么是单子模式 208 10.5 构造器在程序中是何时运行的 211 10.6 综合练习 214 10.7 小结 215 10.8 习题 215 第11章 异常处理(精彩...

    java经典面试2010集锦100题(不看你后悔)

    A) 抽象类使类与类之间依旧具有父子联系,而接口一般只是定义了一种规范,并不使实现的接口之间具有父子关系。 B) 可以为抽象类定义对象,但是不能为接口定义对象。 C) 抽象类与接口的用法几乎都相同,具体用哪一个...

    c.c++找工作面试重点结构图-mindmanager

    但仅仅用建立对象的最远派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类的构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。 (7) 在一个成员初始化列表中同时出现...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    8.5.5 开启新线程执行类的重新载入 56 8.6 WebappClassLoader类 57 8.6.1 类缓存 58 8.6.2 载入类 59 8.6.3 应用程序 59 第9章 session管理 62 9.1 概述 62 9.2 Sessions 62 9.2.1 Session接口 62 9.2.2 ...

    how-tomcat-works

    8.5.5 开启新线程执行类的重新载入 56 8.6 WebappClassLoader类 57 8.6.1 类缓存 58 8.6.2 载入类 59 8.6.3 应用程序 59 第9章 session管理 62 9.1 概述 62 9.2 Sessions 62 9.2.1 Session接口 62 9.2.2 ...

    突破程序员基本功的16课.part2

    2.2.3 调用被子类重写的方法 2.3 父子实例的内存控制 2.3.1 继承成员变量和继承方法的区别 2.3.2 内存中子类实例 2.3.3 父、子类的类变量 2.4 final修饰符 2.4.1 final修饰的变量 2.4.2 执行"宏替换"的变量 ...

    JavaScript王者归来part.1 总数2

     12.5.2 弄清层级关系--父子与兄弟   12.5.3 如何搜索特定节点   12.5.4 克隆节点--一个使用cloneNode()复制表格的例子   12.5.5 移动节点及其范例   12.5.6 关于添加新行和排序的小技巧   12.6 读写数据...

    JAVA—面向对象

    目录 概念: ...父子之间有相同的属性和方法 重写: 概念: 重写要求: 调用父类构造函数 为什么子类一定要访问父类中的构造函数? final 抽象: 概念: 特点: 接口 基础知识: 特点: 多态 概念:

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    7.3.3父子类对象的类型转换 7.4抽象类和接口 7.4.1为什么需要抽象类 7.4.2为什么需要接口 7.5其他内容 7.5.1final关键字 7.5.2Object类 7.6一些工具的使用 7.6.1将字节码打包发布 7.6.2文档的使用 7.7小结...

    asp.net知识库

    通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件...

    Spring.3.x企业应用开发实战(完整版).part2

    10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 ...

    Spring3.x企业应用开发实战(完整版) part1

    10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 ...

    Delphi5开发人员指南

    7.8.3 调用ActiveX控件的方法 165 7.9 总结 166 第二部分 高级技术 第8章 使用GDI和字体的图像编程 167 8.1 TImage:Delphi的图像显示 167 8.2 存储图像 168 8.3 使用TCanvas的属性 169 8.3.1 画笔 170 8.3.2 使用...

    JAVA 综合面试题.doc

     this(参数):调用本类的其他构造方法。  2. 作用域public,protected,private,以及不写时的区别?............................................. 9 Public 公有的 protected 受保护的 private 私有的 3. 编程...

    Visual C++2010开发权威指南(共三部分).part1.rar

    2.8.1 视图类对文档类的调用 100 2.8.2 在框架类中获得当前的文档类和视图类对象指针 101 2.8.3 获得应用程序类对象的指针 101 2.8.4 从应用类对象中获得主框架类对象的指针 101 2.9 小结 102 第3章 Visual C++ 2010...

    Spring.html

    基于父类:代理对象与目标对象是父子关系.目标不能被final修饰 修改默认代理方法: 增强种类 前置通知 后置通知 异常通知 最终通知 环绕通知 注意:使用注解的方式,最终通知和后置通知顺序换了,建议...

    (全)传智播客PHP就业班视频完整课程

    9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的封装 继承 多态 9-30 6 面向对象的封装 继承 多态2 9-5 1.php xml编程①-xml基本介绍 xml元素 xml属性 9-5 2.php xml编程②-cdata 实体字符 处理指令 dtd快速入门 ...

Global site tag (gtag.js) - Google Analytics