1. 子类实例化时一定会调用父类的构造函数,然后再调用自己的构造函数(析构时顺序相反)
(因为子类继承了部分父类的成员变量,需要调用父类的构造函数来初始化)
2. 若有自定义的构造函数,则系统调用自定义构造函数;如果没有,则系统会自动生成一个默认的构造函数并调用它
(系统自动调用属于“隐式调用”)
3. 如果有多个自定义的构造函数,系统会优先调用那个无参的构造函数
4. 如果父类有自定义构造函数,且只有有参构造函数(且参数不全都有默认值),则子类实例化时必须显式调用父类构造函数,否则会报错