- 构造函数
- Kotlin的构造函数分为两部分,第一部分是主构造函数,第二部分是次级构造函数
- 对于主构造函数来说,是和类一起定义的 class my_class constructor (var name:String,var score:Number)
- init代码块,在类创建时额外调用
- init在次级构造器之前
- 由于次级构造函数,一般会利用:this(name,age)等来间接调用主构造函数帮助构造
- 因此 ,主构造函数,一般是最少参数的情况
- 继承
- Kotlin一般类中的变量和方法,都默认有final属性
- 想要继承,类,变量,方法 解决方案 :
- 上述东西前加open
- 在重写方法时,override注解会被替换为override关键字
- 通过override关键字限定的方法,也会默认被下次override掉
- 抽象类
- 抽象类反应的是类的本质,它看起来和JS的原型有些像
- 抽象类中可以实现一些方法和属性,一般都是抽象的,供继承者调用
- 语法
- abstract Human(){
- abstract var name:String
- abstract var age:Int
- abstract fun eat()
- }
- //可以在Class内部用Override关键字去替换属性,也可以在主构造函数中使用override关键字
- Class Student(override var name:String,override var age:Int):Human(){
- override eat(){ //eat关键字 }
- }
- 接口
- 接口反应的是事物的特性,不论是implement还是extends,都用 : 代替
- 接口中是抽象方法,也可以写字段,但是不能赋值
- 默认是抽象方法?
- 多态
- 我是一个父类,但是调用子类的构造函数
- 这是我就有子类的方法
- 智能类型推断
- 如果判断a是A的实例,那么此时a就自动被转换为A类型
- is 包含了 推断的功能
- 内部类
- 如果定义一个内部类,那么默认情况下,它是静态的
- 意思是,和外部类没有任何关系
- 想要有关系的话,我们就使用inner关键字,此时就可以在内部类中拿到外部类的变量和方法
- this的使用
- 在Kotlin的内部类中使用this@X
- 在嵌套多层内部类时,X是你想找的变量所在的那个类
- this指针是超越层级的
- 中缀表达式 infix关键字
- 作用:增强语义
- 必须是成员函数
- 函数只有一个参数
- 参数不能是vararg可变参数,也不能有默认值
- 懒加载和延迟绑定
- 都可以单独成立
- 懒加载 by lazy { }
- 延迟绑定 lateinit val name:String
- 扩展函数(伴随函数)
- 作用:代替Utils静态类
- this呀什么的,和在普通的类中是一样的,随便给你调用
- 不可以被继承,只能被父类使用
- fun YourClass.YourBindIngFunction(){
- }
- 数据类,单例类,枚举类
- 数据类:data
- 单例类:Object
- 枚举类:enum
- 密封类:
- sealed
- 其中枚举的是Class,封装很多的class
- 单例模式
- by lazy
- 只能加载一次
- 同步的,线程安全的
- 已经确定值的,代码块的最后一句是返回值
- Companion Object 代码块
- Object关键字
- 委托
- 在实现某个接口时,委托某个以实现的类来实现
- 自己当然可以实现类的方法
- 不过也可以直接调用被委托的类,简单来说,把被委托的类当作工具人
- 关键字 by
Kotlin入门(3)
原文:https://www.cnblogs.com/frontend-tutorial/p/13584041.html