4个构造函数最终要归结到一个，形成调用链，参考一下scala的构造函数约定