Kotlin 基础二

类和继承

Kotlin 中使用关键字 class 声明类

class Person {...}

构造函数

一个类可以有一个主构造函数和一个或多个次构造函数
次构造函数:前缀有 constructor的,可以直接委托或者通过别的次构造函数间接委托。委托到同一个类的另一个构造函数用 this 关键字即可:

class Person(var name: String) {//主构造函数,name为类属性
//    var name: String = name
    var age: Int = 18
    constructor( name:String , age:Int) : this(name){//次构造函数
        this.age = age
        this.name = name
    }
}

创建类的实例

 val person = Person("hello")
 val person1 = Person("world", 2018)

创建实例不需要关键字'new'

继承

/**
 * The root of the Kotlin class hierarchy. Every Kotlin class 
 * has [Any] as a superclass.
 */
 public open class Any {
        public open operator fun equals(other: Any?): Boolean
        public open fun hashCode(): Int
        public open fun toString(): String
    }

Any是所有kotlin类的超类,Any 并不是 java.lang.Object,除了 equals()、hashCode()和toString()外没有任何成员。

open class Person(var name: String)

class Coder(var skill: String, name: String) : Person(name)

//使用 super 关键字初始化其基类型
class Coder : Person {
    constructor(name: String) : super(name)
}

类上的 open 标注与 Java 中 final 相反,它允许其他类从这个类继承。默认情况下,在 Kotlin 中所有的类都是 final

覆盖方法

Kotlin 需要显式标注可覆盖的成员(我们称之为开放)和覆盖后的成员:

open class Person {
   open fun show(){}
}
class Coder : Person() {
    override fun show() {}
}

override 的成员本身是开放的,它可以在子类中覆盖。如果你想禁止再次覆盖,使用 final 关键字:

//可覆盖
class Coder : Person() {
    override fun show() {}
}
class Coder2 :Coder(){
    override fun show() {
        super.show()
    }
}

//禁止再次覆盖
class Coder : Person() {
  final  override fun show() {}
}

覆盖属性

类似于覆盖方法,在超类中声明然后在派生类中重新声明的属性必须以 override 开头

属性和字段

var:可变的(相当于普通变量)

val:只读的(相当于final修饰的变量)

只读属性不允许 setter

val不能重新分配:

class Person {
    val age: Int = 18
    fun setAge(){
        age = 20 //val cannot be reassigned
    }
}

猜你喜欢

转载自blog.csdn.net/qq_31130725/article/details/81476895