kotlin初学者继承(extend)(代码片段)

帅次 帅次     2023-02-23     547

关键词:

Kotlin 继承(extend)

        Kotlin 允许一个类继承自另一个类

        Kotlin 中所有类都继承自 Any 类

        Any 类是所有类的超类,对于没有超类型声明的类是默认超类

        Kotlin 类默认都是封闭的,要让某个类开放继承,必须使用 open 关键字修饰它。

注意:

在 Kotlin 中 Any 类是所有类的超类

在 Java 中 Object 类是所有类的超类

Any 超类

        Any 默认提供了三个函数:

public open class Any 
    
    public open operator fun equals(other: Any?): Boolean

    public open fun hashCode(): Int

    public open fun toString(): String


        从这里发现 无论是类还是函数,都使用了 open 关键字修饰。

        同时发现,这里只是定义了函数,没有实现。为什么呢?因为Kotlin是跨平台语言,可以在Android、macOS、Windows、JavaScript上运行,为了支持跨平台更友好,在不同平台有不同实现,所以在这里并未展示。

继承类

/* 食物基类 */
open class Food
    fun explain() = "Food explain"


class Apple :Food()
    

        不加 open 关键字修饰是不让继承滴,如下图:

函数重写

        在基类中,使用 fun 声明函数时,此函数默认为 final 修饰,不能被子类重写。

        如果允许子类重写该函数,那么必须使用 open 关键字修饰它, 子类重写函数使用 override 关键字。

/* 食物基类 */
open class Food
    //函数必须用 open 关键字修饰,子类才能覆盖
    open fun explain() = "Food explain"

/* 继承Food */
class Apple :Food()
    //使用 override 关键字覆盖父类函数
    override fun explain() = "Apple explain "

        在 Kotlin 中 override 是个关键字而不是注解。

使用

fun main() 
    //多态:父类类型的引用子类类型的对象
    val f: Food = Apple()
    println(f.explain())

属性重写

/* 食物基类 */
open class Food 
    open val price = 100
    ...


/* 继承Food */
class Apple : Food() 
    override var price = 36
    ...


fun main() 
    //多态:父类类型的引用子类类型的对象
    val f: Food = Apple()
    println(f.explain())//Apple explain 36

类型检测(is)

Kotlin的 is运算符 可以用来检查某个对象的类型。

    println(f is Food)//true
    println(f is Apple)//true
    println(f is File)//false

智能类型转换(as)

Kotlin的 as运算符 可以用对某个对象进行类型转换。

初学者——面向对象的理解03(代码片段)

什么叫做继承继承是Java中实现代码重要的重要手段之一。Java中只支持单根继承,即一个类只能有一个直接父类。简单点来说就是继承是类和类之间的关系。为什么要使用继承提升代码的复用性减少代码的冗余继承的创建class子... 查看详情

kotlin初学者抽象类(代码片段)

抽象类        要定义一个抽象类,你需要在定义之前加上abstract关键字,即包含了具体的函数实现,也包含没有函数实现。//定义抽象类abstract class Book    //未实现函数    abstract fun introduce():String    //实... 查看详情

kotlin初学者类的修饰符(代码片段)

类的修饰符        Kotlin类的修饰符包括classModifier和accessModifierclassModifier        类属性修饰符,标示类本身特性abstract//抽象类final//类不可继承,默认属性enum//枚举类open//类可继承,类默认是final的annotation//... 查看详情

kotlin类的继承(代码片段)

与Java不同,kotlin使用冒号,而Java中使用extends,注意冒号后面需要调用夫类的构造器。属于单继承,使用open关键字允许继承classpackageloaderman.demoopenclassPerson(name:String)protectedvarmName:String=namefungetName():StringreturnmNamepackageloaderman.democlass... 查看详情

kotlin学习之路:继承(代码片段)

...承二.继承中的构造函数2.1继承中Java的构造函数2.2继承中Kotlin的构造函数2.3Kotlin多个构造函数的情况三.重写和重载3.1方法的重写3.2属性的重写四.super关键字4.1简单用法4.2复杂情况下的用法4.2.1子类重写方法中使用super4.2.2子类选择... 查看详情

java小白入门200例80之java继承(extends)(代码片段)

...,期待与您一起学习、成长、起飞!引言很多Java初学者问我࿰ 查看详情

kotlin初学者扩展-享受编程(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。目录一、介绍二、扩展函数2.1定义扩展函数2.1.4定义超类(Any)扩展函数2.1.5泛型扩展函... 查看详情

kotlin初学者类和对象(代码片段)

目录前言定义类创建类添加属性和函数使用field计算属性构造函数主构造器init关键字主构造函数定义属性次构造器默认值初始化顺序无构造器前言        Kotlin是一门面向对象的开发语言。也有着面向对象语言的特性。而面... 查看详情

kotlin初学者java和kotlin互操作(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用Kotlin2... 查看详情

kotlin初学者java和kotlin互操作(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用Kotlin2... 查看详情

kotlin初学者java和kotlin互操作(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、Kotlin调用Java1.1互操作性与可空性1.2类型映射1.3属性访问二、Java调用Kotlin2... 查看详情

kotlin初学者函数式编程(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、函数式编程概念1.1面向函数编程(FOP)1.2高阶函数1.3为什么使用... 查看详情

kotlin初学者函数式编程(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、函数式编程概念1.1面向函数编程(FOP)1.2高阶函数1.3为什么使用... 查看详情

kotlin初学者函数式编程(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者五星好评:左侧点一下(网页端),移动端:https://bbs.csdn.net/topics/603956616目录一、函数式编程概念1.1面向函数编程(FOP)1.2高阶函数1.3为什么使用... 查看详情

kotlin初学者扩展-享受编程(代码片段)

...;CSDN博客专家、华为云·云享专家认证系列专栏:Kotlin初学者学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。目录一、介绍二、扩展函数2.1定义扩展函数2.1.4定义超类(Any)扩展函数2.1.5泛型扩展函... 查看详情

1-8继承extends(代码片段)

什么是继承?继承是面向对象三大特征之一。java中的继承描述的是两个类之间的关系,被继承的类称为父类,继承的类称为子类,使用extends关键字来表示。在java语言里面只支持单继承,即一个类只能有一个父类,子类可以继承... 查看详情

javascript进阶教程非extends的组合继承(代码片段)

🥑 欢迎继续来到JavaScript进阶教学!   继承也是面向对象的特性之一,但是在ES6版本之前是没有extends去实现继承的,我们只能通过 构造函数 和 原型对象 来实现继承,其中分别为构造函数来继承属性... 查看详情

kotlin小悟-这个继承有点不一样(代码片段)

今天聊聊kotlin中关于构造函数的一个话题。我们知道,在kotlin中构造函数分为主构造函数和从构造函数,关于详细的内容,可以点击下面的文章链接了解。Kotlin系列之主构造方法和初始化语句块Kotlin系列之从构造方法... 查看详情