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

这篇具有很好参考价值的文章主要介绍了【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。





一、使用 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 : true
student is Student : true
person is Person : true
person is Student : false




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



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


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


在下面的代码中 :

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

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

var student: Person = Student()

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

kotlin is,Kotlin,kotlin,java,is运算符,as运算符,Any超类

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

(student as Student).helloStudent()

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

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

kotlin is,Kotlin,kotlin,java,is运算符,as运算符,Any超类


代码示例 :

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 : true
student is Student : true
Hello World Tom
Hello Student
Hello Student




三、Any 超类



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

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


Any 类原型如下 :

package kotlin

/**
 * Kotlin类层次结构的根。每个Kotlin类都有[Any]作为超类。
 */
public 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://www.toymoban.com/news/detail-778133.html

到了这里,关于【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】实现Date类的各种运算符重载

    上一篇文章只实现了operator==操作符重载,由于运算符较多,该篇文章单独实现剩余所有的运算符重载。继续以Date类为例,实现运算符重载: 1.Date.h Date.cpp 3.Test.cpp

    2024年02月20日
    浏览(39)
  • 【C++初阶】五、类和对象(日期类的完善、流运算符重载函数、const成员、“&”取地址运算符重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【C++初阶】四、类和对象 (构造函数、析构函数、拷贝构造函数、赋值运算符重载函数)-CSD

    2024年02月05日
    浏览(49)
  • es6的语法糖,展开运算符,类的实现

          对象存在键值对,如果需要解构对象,你需要使用对象的键名为变量名     字符串的展开   数组的展开   对象的展开 对象 的简明写法1: 对象 的简明写法2: 具有相同特征的一类事物的抽象 1、使用class 2、类的动态属性定义在构造器中(constructor),如果没有定义

    2024年02月02日
    浏览(39)
  • kotlin学习(二)泛型、函数、lambda、扩展、运算符重载

    Kotlin 中的类可以有类型参数,与 Java 类似: 创建这样类的实例只需要提供类型参数即可: 如果类型参数可以推断出来,例如从构造函数的参数或者从其他途径,就可以省略类型参数: String作为Object的子类,就可以直接将子类对象赋值给父类,这个操作即达到了 型变 。 但是

    2024年02月09日
    浏览(40)
  • 运算符重载的函数作为类的成员函数和友元函数

    🐶博主主页: @ᰔᩚ. 一怀明月ꦿ  ❤️‍🔥 专栏系列: 线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++ 🔥 座右铭: “不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 🐰运

    2024年02月08日
    浏览(40)
  • C# 类class、继承、多态性、运算符重载,相关练习题

    34.函数重载 35.几个相同的函数  print() ,用于打印不同的数据类型。   36.基类和派生类   37.基类的初始化   38.多重继承   39.动态多态性   40.抽象性和虚方法   41.通过虚方法 area() 来计算不同形状图像的面积   42.运算符重载的实现   @www.runoob.com 

    2024年02月09日
    浏览(44)
  • C++从入门到精通——类的6个默认成员函数之赋值运算符重载

    类的6个默认成员函数:如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 C++为了增强代码的

    2024年04月25日
    浏览(52)
  • 【C++】类和对象③(类的默认成员函数:拷贝构造函数 | 赋值运算符重载)

    🔥 个人主页: Forcible Bug Maker 🔥 专栏: C++ 目录 前言 拷贝构造函数 概念 拷贝构造函数的特性及用法 赋值运算符重载 运算符重载 赋值运算符重载 结语 本篇主要内容:类的6个默认成员函数中的 拷贝构造函数 和 赋值运算符重载 在上篇文章中我们讲到了类的默认成员函数的

    2024年04月17日
    浏览(48)
  • 【C++】:拷贝构造函数与赋值运算符重载的实例应用之日期类的实现

    🔑日期类的实现,将按以下声明依次进行,其中因为Print函数比较短,直接放到类里面让其变成内联函数 🔑而我们实现日期类经常要用到某月有多少天,在这里先把获得某月有多少天的函数实现出来。实现时先检查传参有没有问题,在注意把数组设置成静态的,出了作用域

    2024年02月08日
    浏览(65)
  • 【C++技能树】令常规运算符用在类上 --类的六个成员函数II

    Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法…感兴趣就关注我吧!你定不会失望。 C++中为了增强代码的可读性,加入了运算符的重载,与其他函数重载一样。其命名格式如下: 返回值类型 operator操作符(参数列表) 但并不是所有运算符都可以重载的: 不可以自定

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包