我的Kotlin学习之旅(四)

来源:互联网 发布:网络卡牌类游戏 编辑:程序博客网 时间:2024/05/21 14:53

类和继承

1.类
在Kotlin中类也是用class表示,与Java不同的是,如果这个类没有内容,可以省略这对大括号
可以只写:

class Person

2.构造函数
在 Kotlin 中类可以有一个主构造函数以及多个二级构造函数。主构造函数是类头的一部分:跟在类名后面
例如:

class Person constructor(name: String) {}

这个主构造函数有一个形参,类型是String,形参名是name,这些都是可以由自己的需求决定的。
当这个主构造函数没有使用注解(例如inject–>来自最近用到的Dagger等,有兴趣的朋友可以看看我的另外一篇:http://blog.csdn.net/ckwccc/article/details/78686194)
或者没有可见性说明(例如private等)时,可以省略关键字constructor,直接写成:

class Person (name: String) {}

主构造函数不能包含任意代码。初始化代码可以放在以 init 做前缀的初始化块内
当创建这个类时,Kotlin会自动的去加载init这个代码块

class Person(name: String) {    init {        name = "ckwcc"    }}

注意主构造函数的参数可以用在初始化块内,也可以用在类的属性初始化声明处:
例如:

class Person(name: String) {    //类的属性初始化声明    val customerKry = name.toUpperCase()}

还有一种更加简洁的声明方式(直接在主构造函数中声明):

class Person(val name: String,var age: Int) {    //注意: val:一旦赋值之后就不能再改变了,而var可以}

3.二级构造函数

类的二级构造函数,需要加前缀 constructor:

class Person (name: String){    constructor(age: Int) {        //必须有constructor关键字    }}

如果一个非抽象类没有声明构造函数(主构造函数或二级构造函数),它会产生一个没有参数的构造函数。该构造函数的可见性是 public 。这个东西的影响是在继承它的时候,你需要在类名后面加一对小括号:

class StickyHeaderActivity : AppCompatActivity()

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

class Person(val name: String) {    constructor (name: String, paret: Person) : this(name) {        parent.children.add(this)    }}

4.类实例的使用
这里需要注意的是,Kotlin中没有 new 这个关键字,而且所有的值都需要用val或者var来接收,这个我在一开始学习的时候也觉得有一点点不习惯,因为在Android中,都是用自己的类型来接收的。

val person = Person()

5.继承

声明一个明确的父类,需要在类头后加冒号再加父类
例如

open class Base(p: Int)//这是父类class Derived(p: Int) : Base(p)//子类继承父类,需要写父类的主构造函数,里面的值是自己的主构造的参数

6.抽象类

关键字也是abstract,抽象函数和抽象类默认是open的,即可以被继承或者复写

7.复写(方法或者属性)

如果父类的某个方法或者属性想要被子类复写,需要加上open关键字
而子类复写的方法上必须有override 关键字

原创粉丝点击