天天看点

Kotlin语法(类和对象)二、类和对象:

类的声明包含类名,类头(指定类型参数,主构造函数等等),以及类主体,用大括号包裹。类头和类体是可选的;如果没有类体可以省略大括号。

在 Kotlin 中类可以有一个主构造函数以及多个二级构造函数。主构造函数是类头的一部分:跟在类名后面(可以有可选的参数)。

初始化代码可以放在以 init 做前缀的初始化块内:

如果构造函数有注解或可见性声明,则 constructor 关键字是不可少的,并且注解应该在前:

前缀是 constructor:

如果类有主构造函数,每个二级构造函数都要,或直接或间接通过另一个二级构造函数代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字:

没有声明构造函数,则有一个默认的无参构造函数。

所有类的基类:Any,类似Java中的Object

所有非抽象类默认都是不可继承的(java中的final),如果要被子类继承,需要使用<code>open</code>关键字(与java中的final功能相反),继承用<code>:</code>操作符。

方法如果要被重写,则也需要是<code>open</code>的,不想被重写就加<code>final</code>

方法重写规则:如果有多个相同的方法(继承或者实现自其他类,如A、B类),则必须要重写该方法,使用super范型去选择性地调用父类的实现。

<code>abstract</code>关键字,抽象类和函数默认是<code>open</code>的。

使用伴随对象可以直接使用类名来访问(用法类似Java中的static,但是不一样):

与java的static不同,运行时它们仍然是真正对象的成员实例,比如可以实现接口:

一般定义变量的时候有默认的getter/setter方法;如果使用$访问,则可以避开getter/setter方法。

改变一个访问者的可见性或者注解它,可以不用改变默认的实现:

可以包含抽象方法,以及方法的默认实现。可以有属性但必须是抽象的。一个类或对象可以实现一个或多个接口。

接口属性不能赋值,需要被子类override:

private: 只在该类(以及它的成员)中可见

protected: 和 private 一样但在子类中也可见

internal: 在本模块的所有可以访问该类的均可以访问该类的所有 internal 成员

public: 任何地方可见

使用<code>data</code>关键词修饰类,则会自动添加<code>equals()/hashCode</code>, <code>toString</code>, <code>[compontN()functions]对应按声明顺序出现的所有属性</code>, <code>copy()</code>

组件函数允许数据类在多重声明中使用:

类可以标记为 inner 这样就可以访问外部类的成员。内部类拥有外部类的一个对象引用:

类似Java的匿名内部类,可以继承/实现多个:

一个没有父类的对象,我们可以这样写:

类代理:

属性代理:

<a href="http://huanglizhuo.gitbooks.io/kotlin-in-chinese/content/ClassesAndObjects/DelegationProperties.html">标准代理</a>

参考:

<a href="http://kotlinlang.org/docs/reference/basic-syntax.html">http://kotlinlang.org/docs/reference/basic-syntax.html</a>

<a href="http://huanglizhuo.gitbooks.io/kotlin-in-chinese">http://huanglizhuo.gitbooks.io/kotlin-in-chinese</a>