构造函数的调用是由上至下的顺序调用的。就是说先调用父类的构造函数再调用子类的。如果继承体系为多层,那么当某一类实例化时,编译器会从继承体系最顶端的根类进行构造函数的调用,直至向下达到要实例化的类为止;在这个过程中,每个构造函数都会初始化它自己类中的字段。
看到这里,有人肯定会问那么调用过程中编译器如何决定该调用哪个构造函数呢?毕竟有些类不止一个构造函数。下面就谈一下这个问题:
构造函数调用方式分为两种显式调用和隐式调用。因此,构造函数的调用过程依赖于代码中是显示调用父类的构造函数还是隐式调用。咱们先来说一下隐式调用,何谓隐式调用呢?大家都在经常用,就是写子类构造函数的时候没有具体指定父类的构造函数,如public Test(){};编译器编译时会如此写:public Test():base(),那么调用父类的构造函数为编译器默认的构造函数(如果父类没有定义构造函数的话)或参数列表为空的构造函数。下面来说一下显式调用,如public Test():base()或public Test(String name):base(name),那么就会调用指定的父类的构造函数,这里面需要注意的是name字段可以为父类的私有字段。
还有一些需要补充的:
public Test(String name,String passwd):base(name)
{....}
public Test(String name):this(name,"123")
{....}
这两个构造函数如何调用,就留给各位自己去研究吧。
关于构造函数的内容还有很多,剩下的其他日志中再谈吧,希望对各位有所帮助