广告
返回顶部
首页 > 资讯 > 精选 >【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )
  • 943
分享到

【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )

kotlinjavais运算符as运算符Any超类 2023-08-23 18:08:53 943人浏览 独家记忆
摘要

文章目录 一、使用 is 运算符进行类型检测二、使用 as 运算符进行类型转换 ( 智能类型转换 )三、Any 超类 一、使用 is 运算符进行类型检测 在 Kotlin 中 , 如果不确定一个 实例对象的类型 ,





一、使用 is 运算符进行类型检测



Kotlin 中 , 如果不确定一个 实例对象的类型 , 可以 使用 is 运算符进行判定 , 使用方法

实例对象 is 判定类型

上述用法可以判定 实例对象 是否是 判定类型 , 如果是 返回 true , 反之 返回 false ;


代码示例 : 在下面的代码中 , 调用 student is Person 判断 student 对象是否是 Person 类型 ;

open class Person(val name: String, val age: Int) {    fun info() {        println("name : $name, age : $age")    }    open fun sayHello(){        println("Hello World")    }}class Student : Person("Tom", 18){    override fun sayHello(){        println("Hello World Tom")    }}fun main() {    var student = Student()    var person = Person("Jerry", 12)    println("student is Person : ${student is Person}")    println("student is Student : ${student is Student}")    println("person is Person : ${person is Person}")    println("person is Student : ${person is Student}")}

执行结果 :

student is Person : truestudent is Student : trueperson is Person : trueperson is Student : false




二、使用 as 运算符进行类型转换 ( 智能类型转换 )



子类对象 声明为 父类类型 , 如果要 调用 子类 特有的方法 , 必须 使用 as 运算符进行 类型转换 ;


智能类型转换 : 使用 as 运算符进行 类型转换 , 只要进行一次类型转换 , 在后面还要调用子类成员时就可以直接调用 , 不再需要手动转换类型 ;


在下面的代码中 :

父类时 Person 类型 , 子类是 Student 类型 ;

创建 Student 对象 , 但是将其声明为 Person 类型 , 此时该对象只能调用 父类 Person 的成员 , 不能调用 Student 对象的特有成员 ;

var student: Person = Student()

student 实例对象 , 可以调用 Person 类中的 sayHello 成员函数 , 但是不能调用 Student 类中的 helloStudent 成员函数 ; 下图中没有 helloStudent 函数的调用提示 ;

在这里插入图片描述

student 对象转为 Student 类型 , 即可调用 Student 类中的 helloStudent 成员函数 ;

(student as Student).helloStudent()

在进行第一次转换之后 , 后面 student 对象 可以直接调用 helloStudent 函数 , 不再需要进行先转换类型再调用 , 这就是 智能类型转换 ;

    (student as Student).helloStudent()    student.helloStudent()

在这里插入图片描述


代码示例 :

open class Person(val name: String, val age: Int) {    fun info() {        println("name : $name, age : $age")    }    open fun sayHello(){        println("Hello World")    }}class Student : Person("Tom", 18){    override fun sayHello(){        println("Hello World Tom")    }    fun helloStudent(){        println("Hello Student")    }}fun main() {    var student: Person = Student()    println("student is Person : ${student is Person}")    println("student is Student : ${student is Student}")    student.sayHello()    (student as Student).helloStudent()    student.helloStudent()}

执行结果 :

student is Person : truestudent is Student : trueHello World TomHello StudentHello Student




三、Any 超类



在 Java 中 , 所有的类都继承自 Object 类 ;

在 Kotlin 中 , 所有的类都继承自 Any 类 ;


Any 类原型如下 :

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

Kotlin 中的 equals , hashCode , toString 等函数在编译器中都已经实现 , 在不同平台的编译器中实现不同 ;

Kotlin 的跨平台能力比 Java 更强 , 为了支持跨平台 , Kotlin 在不同的平台中有不同的实现 ;

来源地址:https://blog.csdn.net/shulianghan/article/details/128728507

--结束END--

本文标题: 【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )

本文链接: https://www.lsjlt.com/news/378818.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作