ps:默认构造函数(主构造函数)
- 普通
open class Animal { }
会有一个默认空的构造函数, - 添加默认构造函数<code>open class Animal(s:String) { } </code>(s:String)为默认构造函数,当这样写后也就覆盖了空构造函数,当再要写新的构造函数时需要使用
constructor
关键字:constructor(i : Int): this("")
,这里的this("")指的是默认构造函数。 - 注意当写新(二级)的构造函数时必须直接或间接代理主构造。比如:上面的是直接代理主构造函数,而间接的
constructor
比如:constructor():this(222)
,这个就代理了上面的constructor
而上面的constructor
又代理了主构造函数 - 调用的顺序是从先执行this再执行调用的构造函数,配合看图应该更直接
可以看到先调用的主构造函数->直接代理主函数的构造函数->间接代理主函数的构造函数->我们调用的构造函数,在1、2 中看到s是有值的为"fffffff",是因为3调用2传入的(111,"fffff")再由2传入1的,到4的时候初始化Animal传入的444 这时才将 i 的值改变了。
-写了这么多希望解释清楚了。如果还不是很理解复制运行看看效果就明白了。 - kotlin的构造函数不同于java 别以为调了二级构造函数其他的构造函数就不会被调用,小心坑。



网友评论