Kotlin类的继承实现详细介绍

1.在kotlin中,默认类都是封闭的closed的。如果要让某个类开放继承,必须用open关键字修饰

类中的方法默认也是关闭的。如果需要子类复写父类的方法,也必须用open修饰。

1)定义父类,用open将类继承打开。用open将函数的复写打开。

//父类必须用open修饰,才能够被继承
open class Person(val name:String) {
    var age = 0
    //父类定义的函数,必须有open修饰,子类才能复写
    open fun doWork(){
        println("do nothing")
    }
}

2)定义子类。属性是不需要open字段修饰的。子类默认继承父类的属性

class Student(name: String) : Person(name) {
    override fun doWork() {
        println("do homework")
    }
}
fun main() {
    val student = Student("HanMei")
    student.age = 20
    println(student.name)
    println(student.age)
    student.doWork()
}

2.kotlin中通过is关键字来检查某个对象的类型。

    val student = Student("HanMei")
    println(student is Student)
    println(student is Person)
    println(student is Any)

Java中用 instanceof 来检查某个对象的类型。

    Student student = new Student();
    System.out.println(student instanceof Student);
    System.out.println(student instanceof Person);

3.在kotlin中存在一个超类Any。所有的类都他的子类。就向Java中的Object超类一样。

Any类中也定义了和Object一样的方法。但是在Any中都是空实现。真正的实现是由kotlin编译器完成的。

public open class Any {
    public open operator fun equals(other: Any?): Boolean
    public open fun hashCode(): Int
    public open fun toString(): String
}

在定义的子类中,可以复写这些方法

class Student(name: String) : Person(name) {
    override fun doWork() {
        println("do homework")
    }
    override fun toString(): String {
        return "name:$name age:$age"
    }
    override fun hashCode(): Int {
        return super.hashCode()
    }
    override fun equals(other: Any?): Boolean {
        return super.equals(other)
    }
}

4.as是一个类型转换操作符。可以将子类类型转换成父类、抽象类接口。

定义一个方法,接收父类类型。

fun sayHello(p: Person) {
    println("Hello," + p.name)
}

由于类的多态,我们可以直接把子类类型赋值给父类类型。

也可以通过as字段转换成父类类型,通常我们不这样做。

    val student = Student("HanMei")
    sayHello(student)
    sayHello((student as Person))

到此这篇关于Kotlin类的继承实现详细介绍的文章就介绍到这了,更多相关Kotlin类的继承内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Kotlin定义其他类的实现详解

    目录 1.嵌套类 2.数据类 3.定义数据类的必须满足的条件 4.解构声明 5.枚举类enum class 6.运算符重载 1.嵌套类 如果一个类只对另外一个类有作用,那么可以将其嵌入到该类中,使两个类在一起.和Java中定义的内部类很像. class Computer { class Mouse(val name:String){ fun showDescribe(){ println("mouse name is $name") } } } fun main() { val mou

  • Kotlin中的扩展函数与属性示例详解

    前言 Kotlin 中类的扩展方法并不是在原类的内部进行拓展,通过反编译为Java代码,可以发现,其原理是使用装饰模式,对源类实例的操作和包装,其实际相当于我们在 Java中定义的工具类方法,并且该工具类方法是使用调用者为第一个参数的,然后在工具方法中操作该调用者: 理论上来说,扩展函数很简单,它就是一个类的成员函数,不过定义在类的外面.让我们来添加一个方法,来计算一个字符串的最后一个字符: package strings /** * @author :Reginer in 2018/5/22

  • Kotlin类的继承实现详细介绍

    1.在kotlin中,默认类都是封闭的closed的.如果要让某个类开放继承,必须用open关键字修饰 类中的方法默认也是关闭的.如果需要子类复写父类的方法,也必须用open修饰. 1)定义父类,用open将类继承打开.用open将函数的复写打开. //父类必须用open修饰,才能够被继承 open class Person(val name:String) { var age = 0 //父类定义的函数,必须有open修饰,子类才能复写 open fun doWork(){ println("

  • java中Object类4种方法详细介绍

    目录 Object(四大方法): hashCode()方法: equals()方法: getClass()方法: toString()方法: 总结 Object(四大方法): 文章干货满满,耐性看完~~何为Object?首先先来看看官方对Object的介绍:在这里附上Java官方的查阅工具:https://docs.oracle.com/en/java/javase/17/docs/api/index.html 由官方介绍可见,object属于Java.lang包内的一个类,而且提供了很多种方法

  • Hibernate核心类和接口的详细介绍

    一.hiobernate核心类和接口预览图 二.hibernate.properties 这个文件是以前老版本使用的 类似于hibernate.cfg.xml文件:作用和hibernate.cfg.xml一致. 三.hibernate.cfg.xml  (1)详细介绍 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下,也可以放在别的目录下. ③指定连接数据库的驱动.用户名.密码.url.连接池.. ④指定对象关系映射文件的位置. ⑤也可使用hibernate.p

  • Kotlin挂起函数的详细介绍

    Kotlin 协程的优势: 解决回调地狱的问题. 以同步的方式完成异步任务. 示例: fun main() { runBlocking { val a = getA() println(a) val b = getB(a) println(b) val c = getC(b) println(c) } } suspend fun getA(): String { withContext(Dispatchers.IO) { delay(2000L) } return "A content"

  • Kotlin作用域函数使用示例详细介绍

    目录 1 let 2 run 3 with 4 apply 5 also 这里我们将介绍Kotlin 5个作用域函数:let,run,with,apply,also. 1 let let 可用于范围界定和空值检查.在对象上调用时,let 执行给定的代码块并返回其最后一个表达式的结果.对象可通过引用它(默认情况下)或自定义名称在块内进行访问. 所以,总结起来,let 有如下三大特征: // 重点11:使用it替代object对象去访问其公有的属性 & 方法 object.let{ it.todo(

  • Android Service类与生命周期详细介绍

    Android  Service类与生命周期 Service是Android四大组件与Activity最相似的组件,都代表可执行的程序,区别在于Service一直在后台运行且没有用户界面. 1.Service的类图和生命周期 先来看看Service的类图: 接下来看看Service的生命周期: 2.开发Service (1)开发Service需要两步: 第1步:定义子类,继承Service 第2步:在AndroidManifest.xml文件中配置Service (2)创建Service pub

  • Android  Service类与生命周期详细介绍

    Android  Service类与生命周期 Service是Android四大组件与Activity最相似的组件,都代表可执行的程序,区别在于Service一直在后台运行且没有用户界面. 1.Service的类图和生命周期 先来看看Service的类图: 接下来看看Service的生命周期: 2.开发Service (1)开发Service需要两步: 第1步:定义子类,继承Service 第2步:在AndroidManifest.xml文件中配置Service (2)创建Service pub

  • Python类的继承与多态详细介绍

    目录 概念 类的创建 类的继承 多态的使用 概念 类(Class): 用来描述具有相同的属性和方法的对象的集合. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用 self:self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类. 类调用 Car.weight 实例化  car01=Car(5) 实例对象调用  car01

  • Kotlin作用域函数应用详细介绍

    目录 1.前置知识 2.使用 3.源码赏析 3.1 let和run 3.2 also和apply 3.3 repeat 3.4 with 4.反编译 5.小结 平时看博客或者学知识,学到的东西比较零散,没有独立的知识模块概念,而且学了之后很容易忘.于是我建立了一个自己的笔记仓库 (一个我长期维护的笔记仓库,感兴趣的可以点个star~你的star是我写作的巨大大大大的动力),将平时学到的东西都归类然后放里面,需要的时候呢也方便复习. 1.前置知识 在Kotlin中,函数是一等公民,它也是有自己的类

  • Kotlin扩展函数超详细介绍

    目录 1.扩展函数 2.infix 关键字 3.扩展函数文件 4.重命名扩展函数 1.扩展函数 1)当我们没法接触某个类的定义,或者某个类没有用open修饰无法继承时,我们可以通过扩展函数,来实现该类功能的扩展.扩展函数,可以扩展自定义类.String类以及kotlin标准库中的其他类. 2)定义扩展函数和定义一般函数差不多.唯一的不同就是,定义扩展函数时,除了函数定义外,还需指定给哪个类进行扩展.如:fun String.addExtention() = "Kotlin: ".plu

随机推荐