• 一起来学Kotlin:概念:18. Kotlin open 关键字与类名、函数名和变量名的使用


    一起来学Kotlin:概念:18. Kotlin open 关键字与类名、函数名和变量名的使用

    这篇文档中,我们将解释如何以及为什么将 open 关键字与类名、函数名和变量名一起使用。

    我们都知道继承(Inheritance)是每一种面向对象编程语言的支柱。 它是一个类的属性和特征由另一个类派生或使用的过程。 简单来说,如果一个名为 ClassA 的类有一些变量和函数,而另一个名为 ClassB 的类继承了 ClassA,那么 ClassB 将使用 ClassA 的变量和方法。 在这里,ClassA 称为父类,ClassB 称为子类。 继承使可重用性成为可能。



    1 Kotlin open 在类名中的使用

    在 Kotlin 中,要从另一个类继承一个类,可以使用以下语法:

    //Base Class
    open class MindOrks {
    
    }
    
    //Derived class
    class AndroidPro : MindOrks(){
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在上面的示例中,我们从 AndroidPro 类继承 MindOrks 类。 因此,MindOrks 是父类,AndroidPro 是子类。

    在 Kotlin 中,默认情况下所有类都是 final 的,即默认情况下它们不能被继承。这与我们在 Java 中学到的相反。在 Java 中,我们必须明确地使类设置为 final 才行。

    所以,要使一个类可以被其他类继承,我们在这里必须用 open 关键字标记它,否则会报错:type is final so can’t be inherited

    2 Kotlin open 在函数名中的使用

    就像类一样,Kotlin 中的所有函数在本质上默认也都是 final 的,也就是说,当函数本质上是 final 时,我们不能 override 一个函数。

    函数的 override 是在子类中重新定义基类函数的过程。所以说,在父类的对应函数前需要加关键字 open,与此同时,在子类中的这个函数前,我们必须使用 override 修饰符。

    open class MindOrks {
        //use open keyword to allow child class to override it
        open fun courseName(){
            println("Course Name")
        }
    }
    
    class AndroidPro : MindOrks(){
        //use the override keyword to override the function
        override fun courseName() {
            println("Android for Professionals")
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这个示例中,MindOrks 父类有一个名为 courseName() 的函数,并且此 MindOrks 类由 AndroidPro 类继承。 在 AndroidPro 类中,我们重写了 courseName() 方法并重新定义了函数的主体。

    3 Kotlin open 在变量名中的使用

    就像类和函数一样,Kotlin 中的变量在本质上默认是 final 的。 因此,要在子类中 override 它,我们需要在父类中将变量设置为 open

    open class MindOrks {
        //use open keyword to allow child class to override it
        open val courseId: Int = 0
    
        //use open keyword to allow child class to override it
        open fun courseName(){
            println("Course Name")
        }
    }
    
    class AndroidPro : MindOrks(){
        //use the override keyword to override the variable
        override val courseId: Int = 1
    
        //use the override keyword to override the function
        override fun courseName() {
            println("Android for Professionals")
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在上面的示例中,MindOrks 类中的 courseId 设置为 0,但在子类中,即 AndroidPro 类中,该值更改为 1。

    一个简单的总结:在 Kotlin 中,类、函数和变量在本质上都默认是 final 的,即它们不能从任何其他类继承。 因此,为了使其可从其他类继承,我们使用带有类、函数和变量名的 open 关键字。

  • 相关阅读:
    软交换呼叫中心系统的支撑系统
    (四) 一文搞懂 JMM - 内存模型
    会话边界控制器(SBC)
    修改jquery-validation让你的验证提示更漂亮
    vuInhub靶场实战系列--Kioptrix Level #4
    超详细的MySQL三万字总结
    vue3 列表页开发【选择展示列】功能
    docker安装mysql
    unity Holoens2开发,使用Vuforia识别实体或图片 触发交互
    ArcGIS直连PostgreSQL(Windows篇)
  • 原文地址:https://blog.csdn.net/zyctimes/article/details/127814613