1.this关键字总是指向调用该方法的对象
2.大部分时候。一个方法访问该类中定义的其他方法、属性时加不加this前缀,效果时一样的,但是省略this前缀只是一种假象而已.实际上在编译的时候这个this会自动添加上
3.方法是类或对象行为特征的抽象,方法是类或对象最重要的组成部分
4.kotlin标准库提供了pair和triple两个数据量,pair类可以包含任意两个类型数据,triple类可以包含三个
5.在Kotlin类中定义属性后,被Kotlin程序使用时只能使用点语法访问属性;被Java程序使用时只能通过getter、setter方法访问属性
6.在定义属性时可以指定自定义的getter和setter方法,这些方法可以加入自己的控制逻辑,getter应该是无参数、带一个返回值的方法;setter是一个形如set(value){}的方法,setter应该是带一个参数、无返回值的方法
7.Kotlin在满足以下条件时,系统会为属性生成幕后字段(Kotlin为该属性所生成的field就被称为幕后字段)
该属性使用Kotlin自动生成的setter和getter方法或其中之一
重写getter、setter方法时,使用field关键字显示引用的幕后字段
8.当程序重写getter或setter方法时,不能通过点语法来对属性赋值,假如在name的setter方法中使用了点语法对属性赋值,实际上就是调用了setter方法,这样就会形成无限递归,因此只能通过field引用幕后字段,从而实现对幕后字段的赋值的
9.在个别情况下,开发者希望自己定义field,并为该field提供setter、getter方法,这时候就可以使用private修饰,kotlin不会为其生成任何getter和setter方法
10.kotlin提供了lateinit修饰符来为属性延迟初始化,可以在定义该属性时和在构造器中都不指定初始化值,lateinit修饰符有以下限制
lateinit只能修饰在类体中声明的可变属性(使用val声明的属性不行,在主构造器中声明的属性也不行)
lateinit修饰的属性不能有自定义的getter或setter方法
lateinit修饰的属性必须是非空类型
lateinit修饰的属性不能是原生类型
kotlin不会为属性执行默认初始化,因此,如果在lateinit属性赋值初始化之前访问,会引发异常
11.内联属性,inline修饰符可以修饰没有幕后字段的属性的getter或setter方法
12.封装是面向对象的三大特征之一,对一个类或对象实现良好的封装,可以实现以下目的
隐藏类的实现细节
让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问
可以进行数据检查,从而有利于保证对象信息的完整性
便于修改,提高代码的可维护性
13.Kotlin提供了四个访问控制符
private:private只能改该类的内部或文件的内部被访问
internal:internal成员可以在该类的内部或文件的内部或同一模块的内部被访问
protected:protected成员可以在该类的内部或文件的内部或其子类被访问
public:public成员可以在任意位置被访问
14.对kotlin而言,初始化块会在创建对象时隐式执行
15.所有的次构造器都要委托调用主构造器,主构造器的作用就是执行初始化块以及为初始化块定义参数
16.继承是面向对象的三大特征之一,也是实现软件复用的重要手段。Kotlin的继承同样是单继承:每个子类最多只有一个直接父类
17.kotlin的类默认就有final修饰,因此kotlin的类默认是不能派生子类的。为了让一个类能派生子类,需要使用open修饰符修饰该类
18.当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行,依此类推,任何kotlin对象,总会先执行Any类的构造器
19,子类继承父类,将可以获得父类的全部属性和方法
20.方法的重写遵循“两同、两小、一大”方法名字,形参列表相同,返回值类型要比父类返回值类型相等或更小,子类方法声明抛出的异常应比父类方法声明抛出的异常相等或更小,子类方法的访问权限应该比父类方法的访问权限更大或相等
21.如果某个方法中访问名为a的属性,但没有显式指定调用者,系统查找a的顺序为:
查找该方法中是否有名为a的局部变量
查找当前类中是否包含名为a的属性
查找a的父类是否包含名为a的属性,依此类推
22.Kotlin的变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋值给该变量的对象决定。如果编译时类型和运行时类型不一致,就有可能出现所谓的多态
23.kotlin的is和!is都非常的只能,只要程序使用了is或者!is对变量进行了判断,系统就会自动将变量的类型转换为目标类型
24.除了is自动转型以外,kotlin也支持使用as运算符进行强制转型