美文网首页
6.Kotlin继承与重写重要特性剖析

6.Kotlin继承与重写重要特性剖析

作者: leofight | 来源:发表于2017-12-23 13:10 被阅读0次

1.Kotlin继承

1)在Kotlin中,所有类在默认情况下都是无法被继承的。
2)换句话说,在Kotlin中,所有类默认情况下都是final的。
3)open的含义与final相反。
4)在Kotlin中,如果一个类没有primary构造方法,那么这个类的每个secondary构造方法就需要通过super关键字来初始化类型,或者通过其他secondary构造方法完成这个任务不同的secondary构造方法可以调用父类型不同的构造方法。

  • 示例代码
//在Kotlin中,所有类在默认情况下都是无法被继承的
//换句话说,在Kotlin中,所有类默认情况下都是final的
//open的含义与final相反
open class Parent(name: String, age: Int) {

}

class Child(name: String, age: Int) : Parent(name, age) {

}

open class Parent2(name: String) {

}

//在Kotlin中,如果一个类没有primary构造方法,那么这个类的每个secondary构造方法就需要通过
//super关键字来初始化类型,或者通过其他secondary构造方法完成这个任务
//不同的secondary构造方法可以调用父类型不同的构造方法
class Child2 : Parent2 {
    constructor(name: String) : super(name) {

    }
}

2.方法重写

在Kotlin中,如果一个子类的某个方法重写了父类中的某个方法,子类方法必须要加上“override”关键字,且父类方法要加上“open”关键字。

  • 示例代码

open class Fruit {
    open fun name() {
        println("fruit")
    }

    fun expirationDate() {
        println("1 month")
    }
}

class Apple : Fruit() {
    override fun name() {
        println("apple")
    }
}

open class Orange : Fruit() {
    final override fun name() {
        println("orange")
    }
}

fun main(args: Array<String>) {
    var apple = Apple();
    apple.name()
    apple.expirationDate()
}
  • 运行结果
apple
1 month

3.属性重写

在Kotlin中,如果一个子类的某个属性重写了父类中的某个属性,子类属性必须要加上“override”关键字,且父类属性要加上“open”关键字。

  • 示例代码
open class MyParent {
    open val name: String = "parent"
}

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

fun main(args: Array<String>) {
    var myChild = MyChild()
    println(myChild.name)
    println("-----------")

    var myChild3 = MyChild3();
    myChild3.method()
    println(myChild3.name)
}

class MyChild2(override val name: String) : MyParent() {

}

open class MyParent3 {
    open fun method() {
        println("parent method")
    }

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

//1.val 可以override val
//2. var 可以override val
//3.val 无法override var

//本质上,val相对于get方法;var相对于get于set方法

class MyChild3 : MyParent3() {
    override fun method() {
        super.method()
        println("child method")
    }

    override val name: String
        get() = super.name + "and child"
}
  • 运行结果
child
-----------
parent method
child method
parentand child

1)val 可以override val
2)var 可以override val
3)val 无法override var
本质上,val相对于get方法;var相对于get与set方法

相关文章

  • 6.Kotlin继承与重写重要特性剖析

    1.Kotlin继承 1)在Kotlin中,所有类在默认情况下都是无法被继承的。2)换句话说,在Kotlin中,所...

  • Solidity开发指南(七):语法解析

    1、 solidity 类的多继承、重写 solidity 类具有多继承的特性: 重写 与其他语言相通,即子类的同...

  • Swift 5.1 (13) - 继承

    继承 继承是一种基本行为:子类继承父类方法,属性和其他特性。子类可以重写父类的方法,属性。继承将类与Swift中的...

  • Swift 六

    继承 定义一个基类 :不继承于其它类的类,称之为基类。 重写:如果要重写某个特性,你需要在重写定义的前面加上ove...

  • 重载(Overload)与重写(Override)

    重载与重写是Java面向对象编程的重要概念。 重写(Override)重写是子类继承父类后,对父类允许访问(子类有...

  • Flutter中extends、implements、mixin

    extends是继承可以继承父类的特性。 Dart中继承是单继承. 构造函数或者析构函数不能继承. 子类重写父类方...

  • Swift 笔记3

    一.三大特性 封装 继承1.重写父类方法 需要加上 override 多态1.必须要有继承2.必须要有重写3.必须...

  • 找不到工作的人还在学习(c++4)

    继承与接口 整个c++程序设计全面围绕面向对象的方式进行。类的继承特性是c++的一个非常重要的机制。继承特性可以使...

  • Python面向对象的学习

    思维导图 包、模块管理 私有的本质 面向对象的三大特性 多继承的顺序问题(不提议多继承) 继承 中的方法重写:两种...

  • Kotlin学习笔记之 6

    6.Kotlin 继承 AnyAny是所有类的超类,就像java中的Object。但它并不等同于Object,除了...

网友评论

      本文标题:6.Kotlin继承与重写重要特性剖析

      本文链接:https://www.haomeiwen.com/subject/pvnfgxtx.html