类字段初始值和构造函数的执行顺序
类中字段初始值和构造函数的执行顺序规范
class 父类 {
父类字段 = print("父类字段")
new(){
print("父类构造函数")
}
}
class 子类: 父类 {
子类字段 = print("子类字段")
new(){
print("子类构造函数")
}
}
目前所有面向对象的编程语言统一按如下顺序执行:
- 父类字段
- 父类构造函数
- 子类字段
- 子类构造函数
这样的做法确保了父类的逻辑不受子类影响,但存在一个隐患,即父类字段初始值或构造函数中调用了一个被子类重写的方法时,子类的该方法无法使用子类的字段初始值,因为这些字段尚未初始化。
因此,我将顺序改成了:
- 父类字段
- 子类字段
- 父类构造函数
- 子类构造函数
这样子类拥有了一定程度的破坏父类的可能性,但我认为实际项目中,这种破坏是预期内的。
自动构造函数
如果一个类没有带参数的构造函数,则系统会自动生成一个,自动生成的构造函数参数为当前类中只读但没有初始化的字段。