类字段初始值和构造函数的执行顺序

类中字段初始值和构造函数的执行顺序规范

  1. class 父类 {
  2. 父类字段 = print("父类字段")
  3. new(){
  4. print("父类构造函数")
  5. }
  6. }
  7. class 子类: 父类 {
  8. 子类字段 = print("子类字段")
  9. new(){
  10. print("子类构造函数")
  11. }
  12. }

目前所有面向对象的编程语言统一按如下顺序执行:

  1. 父类字段
  2. 父类构造函数
  3. 子类字段
  4. 子类构造函数

这样的做法确保了父类的逻辑不受子类影响,但存在一个隐患,即父类字段初始值或构造函数中调用了一个被子类重写的方法时,子类的该方法无法使用子类的字段初始值,因为这些字段尚未初始化。

因此,我将顺序改成了:

  1. 父类字段
  2. 子类字段
  3. 父类构造函数
  4. 子类构造函数

这样子类拥有了一定程度的破坏父类的可能性,但我认为实际项目中,这种破坏是预期内的。

自动构造函数

如果一个类没有带参数的构造函数,则系统会自动生成一个,自动生成的构造函数参数为当前类中只读但没有初始化的字段。