zoukankan      html  css  js  c++  java
  • 子父类中的构造函数

    首先了解构造函数

    构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。即为对象成员变量赋初始值。

    构造函数与类名相同,可重载多个不同的构造函数。如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造方法,这个构造方法不执行任何代码。

    构造函数的调用

    (1)子类只调用父类的默认(缺省)构造函数,即无形参构造函数。如果父类没有默认构造函数,那子类不能从父类调用默认构造函数。
    (2)子类从父类处调用父类默认构造函数,不能成为子类的默认构造函数。
    (3)在创建对象时,先调用父类默认构造函数对对象进行初始化,然后调用子类自身自己定义的构造函数。
    (4)如果子类想调用父类的非默认构造函数,则必须使用super来实现。
    (5)子类必须调用父类的构造函数。可以通过系统自动调用父类的默认构造函数,如果父类没有默认构造函数时,子类构造函数必须通过super调用父类的构造函数。
     
    java 构造函数的执行过程
    类初始化时构造函数调用顺序:
    (1)初始化对象的存储空间为零或null值;
    (2)调用父类构造函数;
    (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式
    class Dollar {
    Money m = new Money();
    Rmb r = new Rmb();
    public Dollar() {
    System.out.println("Dollar is constructor.");
    }
    public static void main(String[] args) {
    new Dollar();
    }
    }
    class Money {
    public Money() {
    System.out.println("Money is constructor.");
    }
    }
    class Rmb {
    public Rmb() {
    System.out.println("RMB is constructor.");
    }
    }
    输出结果:
    Money is constructor.
    RMB is constructor.
    Dollar is constructor.
     

    子父类中的构造函数的特点:

      在子类构造对象时,发现,访问子类构造函数时,父类也运行了。

    为什么会这样呢?

      原因是:在子类的构造函数中第一行有一个默认的隐式语句。super();

    子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。

    为什么子类实例化的时候要访问父类的构造函数呢?

      那是因为子类继承了父类,获取了父类中的内容(属性),所以在使用父类内容之前,首先要看父类如何对自己的内容进行初始化的。

      所以子类在构造对象时,必须访问父类中的构造函数。为了完成这个必须的动作就在子类的构造函数中加入了super语句。如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用哪个构造函数(通过super的参数)。

    注意:super语句必须要定义在子类构造函数的第一行,因为父类的初始化动作必须要先完成。

    通过super关键字初始化父类内容时,子类的成员变量并未显示初始化。等supe()父类初始化完毕后,才进行子类的成员变量显示初始化。

    一个对象的实例化过程:

      Person p = new Person ();

    1、JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接父类的情况下Object不算)

    2、在堆内存中开辟空间,分配地址

    3、并在对象空间中,对对象的属性进行默认初始化

    4、调用对应的构造函数进行初始化

    5、在构造函数中,第一行会先到父类中的构造函数进行初始化

    6、父类初始化完毕后,在对子类的属性进行显示初始化

    7、在进行子类构造函数的特定初始化

    8、初始化完毕后,将地址赋值给引用变量  

  • 相关阅读:
    .net winform软件自动更新
    系统升级程序的介绍(转)
    View、ViewGroup (转)
    修改ViewPager调用setCurrentItem时,滑屏的速度
    onSaveInstanceState和onRestoreInstanceState
    onSaveInstanceState(Bundle outState)的调用时机
    如何在Eclipse中查看Android源码或者第三方组件包源码
    MyBatis学习总结(一)——MyBatis快速入门
    ASP.NET提取多层嵌套json数据的方法
    C# 解析 Json数据
  • 原文地址:https://www.cnblogs.com/beulas/p/7868570.html
Copyright © 2011-2022 走看看