V . 主构造函数 可见性 设置
1 . 构造函数可见性 : 主构造函数默认是 public 可见性 , 如果将该构造函数设置成 private , 那么 constructor 关键字必须要有 ;
class 类名 private constructor( 构造函数参数 ){ //类成员 }
2 . 可见性修饰符 :
① private : 类内部可见 , 所有其它类不可见 , 包括子类 ;
② protected : 本类 和 子类可见 , 其它类不可见 ;
③ internal : 本模块内 可见 ;
④ public : 所有类都可见 ;
VI . 次构造函数 ( 常用情况 )
1 . 次构造函数格式 :
constructor ( 构造函数参数列表 ) : this ( 主构造函数参数列表 ){ //次构造函数体 }
1
2
3
2 . 次构造函数委托主 :
① 委托方式 : 使用 : this ( 被委托的构造函数参数列表 ) 方式 , 直接或间接委托给主构造函数 ;
② 直接委托 : 每个次构造函数必须委托给主构造函数 ( 直接委托主构造函数 ) ,
③ 间接委托 : 委托给其它次构造函数 ( 间接委托主构造函数 ) ;
class Person { constructor ( 次构造函数参数列表 ) { //次构造函数体 } }
VII . 次构造函数 ( 没有主构造函数 )
如果类没有主构造函数 , 那么可以直接声明 次构造函数 , 不同委托给主构造函数 ;
class Person { constructor ( 次构造函数参数列表 ) { //次构造函数体 }
VIII . 构造函数 代码执行顺序
1 . 代码执行顺序 : 先执行主构造函数 , 此时会初始化成员属性 与 执行 init 初始化代码块 , 然后执行次构造函数内容 ;
2 . 初始化代码块 : init 代码块等同于主构造函数的函数体 , 当次构造函数将操作委托给主构造函数时 , 会先执行 init 初始化代码块 , 然后再运行次构造函数体 ;
IX . 调用 主构造函数 / 次构造函数 创建类实例对象
1 . 创建实例对象 : Kotlin 中没有 new 关键字 , 使用 类名 ( 构造函数参数列表 ) 方式 , 创建类对象实例 ;
2 . 示例代码 :
package construct /* 标准的主构造函数 */ class Student constructor(name : String, age : Int){ init { println("主构造函数参数 : name : ${name} , age : ${age} ;") } //等号右边的 name 是构造函数参数值 var name : String = name + " L" //等号右边的 age 是构造函数参数值 var age : Int = age + 1 init { println("成员变量 : name : ${this.name} , age : ${this.age} ; 主构造函数参数 name : ${name} , age : ${age} ;") } //身高成员变量 var height : Int = 0; constructor(name : String, age : Int, height : Int) : this(name, age){ this.height = height } override fun toString(): String { return "Student(name='$name', age=$age, height=$height)" } } /* 省略 constructor 关键字的主构造函数 省略 constructor 前提 : ① 主构造函数没有可见性修饰符 , 如 private , public , protected , internal ② 主构造函数没有注解 */ class Student1 (name : String, age : Int){ } fun main() { //调用主构造函数 var student : Student = Student("Tom" , 18) println(student) //调用次构造函数 var student2 = Student("Jerry", 18, 165) println(student2) }
3 . 执行结果 :
主构造函数参数 : name : Tom , age : 18 ; 成员变量 : name : Tom L , age : 19 ; 主构造函数参数 name : Tom , age : 18 ; Student(name='Tom L', age=19, height=0) 主构造函数参数 : name : Jerry , age : 18 ; 成员变量 : name : Jerry L , age : 19 ; 主构造函数参数 name : Jerry , age : 18 ; Student(name='Jerry L', age=19, height=165)