年前看boss直聘,很多安卓开发岗位需要熟练kotlin开发,为了年后找工作和以后开发效率提升,春节假期开始了kotlin的学习,主要教材是《Kotlin 实战》kotlin in action这本书,这里是第四章内容的回忆和笔记整理。
26、默认方法在kotlin中起作用,因为 kotlin1.0 面向 java6 开发,所以java类实现kotlin接口时,需要重写所有方法(包含默认方法),但是java调用kotlin类时,kotlin接口默认方法是起作用的,所以开发时可以注意用kotlin实现接口后再给Java调用更方便
27、kotlin类实现多个接口时,若存在默认方法可以不重写;若存在重名方法,则必须重写该方法,若这个方法是默认方法,可以在重写方法体内通过super<接口名>调用接口的默认方法
28、kotlin中用override 修饰重写方法
29、kotlin中方法和属性默认是final的,即不可以重写的,有助于智能转换;需要子类重写方法和属性时,可以用open修饰;open修饰后,重写方法默认也是open的,若需要阻止继续重写,用final修饰即可。
30、关键字小结:final和open相反,open和abstract接近,override在重写类中使用;
31、final、open、abstract都不可在接口中使用,接口中成员始终是open的,不能声明为final的,函数体为空时是abstract的,但这个关键字不是必须的。
32、kotlin中只把包作为在命名空间里组织代码的一种方式使用,并不存在Java中默认包内可见的作用,包对可见性没有影响,kotlin默认都是public的
33、kotlin中可见性修饰符:public 全部,internal 模块中,protected 子类中,private 当前类;internal模块可见性到java代码中会转换为public,破坏可见性设计意图
34、kotlin内部默认为嵌套类声明(相当于java中静态内部类),若需要与外部类产生关系形成内部类,需要用inner修饰(java中普通内部类,存储外部类等引用),内部通过 this@外部类名称 访问外部引用
35、关键字:sealed 修饰class(不可以修饰interface),强制所有直接子类都必须嵌套在父类中,避免when使用父类时必须使用else分支处理未包含情况(因为使用sealed修饰的父类作为when条件时,其内部的嵌套类都必须添加到分支中,避免添加类新实现遗漏处理的情况出现)。
36、kotlin 1.1 后,允许在同一文件内声明sealed类的子类,使用规则同上
37、关键字:constructor声明构造方法,init声明初始化代码块
38、特殊标识符:field,属性访问器中访问当前属性的代指
39、私有属性set构造器,相当于java中私有属性,只能通过类中方法访问属性
40、==相当于java中equals,比较值或对象是否相等;===相当于Java中==,用于比较值或引用是否相等
41、is相当于Java中instanceof
42、普通类没有重写toString(),equals(),hashCode()等方法,需要手动添加,若class前用data修饰,则自动重写
43、kotlin使用copy方法完成硬拷贝功能,data类会自动处理,普通类需要自己手动添加这个方法后才可以使用。
44、kotlin可以使用by关键字完成装饰者模式,注意只能对于接口使用,优点是:实现同一个接口时,只需要重写要装饰的方法即可。
object关键字使用场景:
45、(1)对象声明:kotlin使用object关键字修饰带代码段的对象名;将类和该类的实例的声明结合起来,声明一个单例对象,对象名称可以像类中静态变量一样使用,比java匿名内部类好一些,内部可以声明属性和方法,可以直接 对象名. 来使用
46、和普通类的区别是不允许声明构造方法,即该对象声明时已经初始化,实例已经创建完成,不需要再在其它位置实例化它。
47、对象声明可以继承类和接口
48、Java中访问object对象的单例,需要 kotlin类名.object对象名.INSTANCE 引用声明的对象的单例
49、(2)伴生对象:容器类内部用companion关键字标记 object,则可以通过 容器类名. 方式访问object内部代码段中的属性和方法
50、作用二是,可以访问容易类的私有构造,通过伴生对象的不同方法构建参数,调用同一个构造方法生成对象实例(内部可以控制实例是否需要创建新的,来实现享元模式)
51、伴生对象可以有名字也可以没有名字,但大多数时候是通过包含伴生对象的类名来引用伴生对象和内容,所以可以不必关心它的名字
52、伴生对象可以实现接口,此时,如果伴生对象没有名字,包含类名可以作为伴生对象赋值给需要使用接口实现的函数
53、Java访问伴生对象:包含类.Companion.fun() 访问伴生对象,如果伴生对象有名字,则用伴生对象名替换Companion位置
54、伴生对象可以扩展:fun 包含类.Companion.funC(),使用方式和使用伴生对象的自身方法一致
55、(3)对象表达式:匿名对象:和对象声明相似,只是不需要对象名(因为匿名对象多数是用来做函数参数的),可以用变量接收匿名对象
56、java匿名内部类只能扩展一个类或者一个接口,而kotlin匿名对象可以实现多个接口或者不实现接口(仅实现使用到的接口抽象方法);也可以通过SAM(把函数字面值转换成单抽象函数接口的实现)。
这里我整理的内容有些不是原文内容,是我自己理解的,欢迎有兴趣阅读的朋友来交流。
个人QQ号:961697233