Kotlin 继承与构造函数
继承
Kotlin 中规定任何一个非抽象类默认都是不可被继承的 ,相当于Kotlin 中的 val 关键字被修饰类和变量是不可变的 , Java 里声明的 final
他遵循着
1.不是专门为继承而设计的,就无法预知子类如何被实现,存在未知的风险,应该主动加上 final 声明,禁止被继承
2.所有非抽象类是不可以被继承 ,抽象类本身无法创建实例,
- 当子类去继承才能创建实例 ,因此为了Kotlin创建的类 可以被继承,需要在类前面加"open" 关键字
- Kotlin 去继承某个类 用 “:” 冒号表示 ,Java 采用extends
主次函数
~ 继承父类后面有一对括号的意义 涉及主次构造函数
Java 中规定 子类中的构造函数必须调用父类中的构造函数
Kotlin 子类调用父类哪个构造函数,通过括号指定
- 父类后面一对空括号表示 主构造函数初始化时调用父类无参构造函数,此括号不能省略
主构找函数特点 : 没有函数体 ,直接定义在类名后面
- 参数在创建时传入,无需重新赋值 , 因此将参数可声明为 val
- 主构造函数中声明 " val 和 var " 的参数会自动转化为该类字段,会造成与父类同名字段冲突 ,因此不用添加
Kotlin 提供 init 结构体 , 便于在主构造函数中编写逻辑
次构造函数
次构造和主构造区别 : 次构函数有函数体
*当既有主次构造函数次构造必须调用主构造 , " this “关键字用来调用主构造 , 次构造通” constructor "