Kotlin语言

Kotlin类的继承与重写

2018-05-01  本文已影响0人  跳动的字符

 Kotlin是一门基于JVM的开发语言,已成为Android官方开发语言已有一段时间了,最近也开始学习Kotlin这门新的语言了,就算不做Android开发,做后端服务开发用Kotlin也是不错的选择,与Java可以100%的进行互操作。今天先写关于Kotlin类的继承与重写,做此笔记,以便以后复习。

  1. 类的继承
open class Parent(name: String, age: Int) {
    ......
}

class Child(name: String, age: Int): Parent(name, age) {
    ......
}
open class Parent2(name: String) {
    ......
}

class Child2: Parent2 {
    constructor(name: String): super(name) {
        ......
    }
}

也可以这样写:
class Child3(name: String): Parent2(name){
    ......
}
  1. 类的方法重写
open class Color {
    open fun name() {
        println("red")
    }

    fun type() {
        println("7 ColorS")
    }
}

class Blue: Color() {
    override fun name() {
        println("blue")
    }
}
open class Orange: Color() {
    final override fun name() {
        println("orange")
    }
}

如下所示,编译器会报错:'name' in 'Orange' is final and cannot be overridden),
若去掉override,则会报:'name' hides member of supertype 'Orange' and needs 'override' modifier

class SmallOrange: Orange() {
    override fun name() {
        println("small orange")
    }
}

fun main(args: Array<String>) {
    val color = Color();
    println(color.name())
    println(color.type())

    val color1 = Orange();
    println(color1.name())
}

输出结果如下:
blue
7 Colors
orange
  1. 类的属性重写
open class MyParent {
    open val name: String = "parent"
}

class MyChild: MyParent() {
    override val name: String = "child";
}

也可以这样写:
class MyChild2(override val name: String): MyParent() {
    ......
}

fun main(args: Array<String>) {
    val myChild = MyChild()
    println(myChild.name)
}

输出结果如下:
child
open class MyParent3 {
    open fun method() {
        println("parent method")
    }

    open val name: String get() = "parent"
}

class MyChild3: MyParent3() {
    override fun method() {
        super.method()

        println("child method")
    }

    override val name: String
        get() = super.name + " and child"
}

fun main(args: Array<String>) {
    val myChild3 = MyChild3()
    println(myChild3.method())
    println(myChild3.name)
}

输出结果如下:
parent method
child method
parent and child

好了,今天就写到这里。

上一篇 下一篇

猜你喜欢

热点阅读