Kotlin类语法及避雷

Kotlin虽然基于Java语言,但很多语言特性都与Java不一样。这里记录了我学习Kotlin面向对象时的一些见解。

我们首先来看这样一段代码:

class Person {
    var name = ""
    var age = 0
    fun eat() {
        println("$name is eating. He is $age years old.")
    }
}

这是一个基本的类声明,我们创建了两个字段,并且编写了一个类函数。此时,如果我们想要编写其子类,比如Student,并写下了如下代码:

class Student : Person() {
    var sno = ""
    var grade = 0
}

我们会发现出现了编译错误——Person类是final的,无法被继承。

这是因为Kotlin默认类是无法被继承的,如果想要允许类被继承,需要使用open关键字开放对某类的继承,即像这样:

open class Person {
    var name = ""
    var age = 0
    fun eat() {
        println("$name is eating. He is $age years old.")
    }
}

可能你会疑惑,类被允许继承不是理所应当的吗?为何要多此一举手动开放继承权限呢?

这里涉及到了Kotlin语言的设计思想,《Effective Java》中曾经指出——如果一个类不是专门为继承而设计的,那么就应该主动将它加上final声明,禁止它可以被继承。这样可以避免一些未知的风险,而Kotlin则是贯彻这一理念,强制coder遵循这一思想。其实这也是一种安全性的体现。


还有一些关于主次构造函数的辨析内容,写起来可能比较多,后续再进行补充。

Next
Previous