- 构造函数
- 访问修饰符
- 伴生对象
- 单例类
- 动态代理
- kotlin中特有的类
09:kotlin的构造函数
kotlin的类默认是public final的,如果想去final,则需在class前加open关键字
class MainActivity : AppCompatActivity()
class MainActivity : AppCompatActivity(),View.OnClickListener
接口和父类无先后关系,父类后显示的写小括号表示,调用父类无参的构造方法。
如果MainActivity中没有实现构造方法,父类后的小括号可以省略
//跟在类名后面的是主构造函数
class AActivity(var int :Int) : AppCompatActivity(){
//init是主构造函数的代码块
init {
println("主构造函数的代码块")
}
//这是次构造函数
constructor()
}
10:伴生对象
【internal】访问修饰符
kotlin除了有private,protected,public还有一个internal。
只能同个模块(Module)下访问。
伴生对象compaion object
class StringUtils {
companion object {
fun isEmpty(str: String): Boolean {
return "" == str
}
}
}
fun main() {
//kotlin code
StringUtils.isEmpty("")
//java code
StringUtils.Companion.isEmpty("")
}
用伴生对象声明单例
class Single private constructor() {
companion object {
fun get(): Single {
return Holder.instance
}
}
private object Holder{
val instance = Single()
}
}
fun main() {
Single.get()
}
11:by关键字的作用
动态代理
interface Animal{
fun bark()
}
class Dog : Animal{
override fun bark() {
println("wang")
}
}
class Zoo(animal:Animal):Animal by animal
fun main() {
Zoo(Dog()).bark()
}
kotlin会将动态代理编译后变为静态代理,所以比java的动态代理效率高,java的动态代理本质上是通过反射,而kotlin动态代理本质上是通过静态代理去调用的。