• JAVA基础-子类继承父类实例化对象过程


    之前在项目中碰到这样一个问题:

      类B继承了类A,B在实例化的时候,A的构造方法中调用了B的某个方法,并且B的方法中对B的成员属性进行了初始化,然后最后得到的B对象的成员属性为空。

      代码场景如下:

      

      这里B new出来后s会被“s = null”覆盖A中调用init的值,A中调用的方法若被子类覆盖,那么构造过程中虽然是先构造A对象,但是A对像调用的方法却是子对象的方法,然后调用B的代码块,构造方法。

      这里为了不然S=null覆盖原来的初始化值,我们可以去掉代码块中s的初始化过程。

    我们来详细分析下子类构造过程中,代码的执行过程

       图例:

      

      这是一个父子类的模型,中间有静态代码块、初始化代码块、构造方法、成员方法,那么构造TT2()的过程如下:

      new TT2()->new TT1()-> static tt1 1-> static tt1 2-> tt1List = new ...-> tt1 constructor->tt2 static tt2 1-> tt2 static tt2 2->list = null-> tt2 contructor->END

      这样可能不是太清晰,我们用图来标注下:

       

       输出结果如下:

      

      总结:累的加载过程不管多么复杂,总是按照-静态代码块->普通代码块->构造方法,这个顺序执行的,按照顺序一步步分析,将程序结构捋清楚就能避免不必要的错误。

       ps:内部类对外部类属性的调用情况-内部类在使用外部类成员的时候,构造内部类时,会自动给内部类添加外部类的应用,内部类就是通过这个引用调用的外部类中的方法。

  • 相关阅读:
    关于ArcGis for javascrept查询ArcGis server图层信息的方式
    Elasticsearch教程之基础概念
    C# 将日期转换成中文格式
    .Net 自定义Excel模板导出数据
    JavaScript判断浏览器类型
    简单的json传送数据
    Oracle替换临时表空间
    Python多线程循环
    crontab执行不生效-【问题篇】
    Python将MySQL表数据写入excel
  • 原文地址:https://www.cnblogs.com/wykCN/p/4507886.html
Copyright © 2020-2023  润新知