Kotlin中的面向对象(一)

时间:2025-02-08 09:33:41
//父类
open class Base(type:String){

}

//子类
class SubClass(type:String) : Base(type){

}

重写

Kotlin中的重写和java中也有所不同,因为Kotlin提倡所有的操作都是明确的,因此需要将希望重写的方法设为open
open fun funDemo() {}
然后通过override标记实现重写
override fun funDemo() {
     ()
 }
override重写的函数也是open的,如果希望它不被重写(前提是这个类可以被继承),可以在前面增加final标签
open class SubClass : Base{
    constructor(type:String) : super(type){

    }

    final override fun funDemo() {
        ()
    }
}
当一个类同时继承且实现了多个接口时,如果重写的方法在父类和接口中都有定义,那么可以通过super<>的方式进行继承
//接口
interface InterfaceDemo{
    fun funDemo(){}
}

//继承Base并且实现InterfaceDemo
class SubClass : Base(),InterfaceDemo{
    final override fun funDemo() {
        super<Base>.funDemo()
        super<InterfaceDemo>.funDemo()
    }
}

密封类

密封类用于代表严格的类结构,值只能是有限集合中的某中类型,不可以是任何其它类型。这就相当于一个枚举类的扩展:枚举值集合的类型是严格限制的,但每个枚举常量只有一个实例,而密封类的子类可以有包含不同状态的多个实例。声明密封类需要在 class 前加一个 sealed 修饰符。密封类可以有子类但必须全部嵌套在密封类声明内部。
//密封类
sealed class Expr {
    class Const(val number: Double) : Expr()
    class Sum(val e1: Expr, val e2: Expr) : Expr()
    object NotANumber : Expr()
}

和Kotlin中的类相关的用法就介绍到这里,文中的完整代码见 github,在 Kotlin中的面向对象(二)中将会介绍属性、接口等面向对象过程中同样常见的内容。