Kotlin开发中open关键字与类名函数名和变量名的使用方法浅析

 更新时间:2023年02月17日 10:03:08   作者:破浪会有时  
这篇文档中,我们将解释如何以及为什么将 open 关键字与类名、函数名和变量名一起使用,了解内部原理是为了帮助我们做扩展,同时也是验证了一个人的学习能力,如果你想让自己的职业道路更上一层楼,这些底层的东西你是必须要会的

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

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

1 Kotlin open 在类名中的使用

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

//Base Class
open class MindOrks {
}
//Derived class
class AndroidPro : MindOrks(){
}

在上面的示例中,我们从 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")
    }
}

这个示例中,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")
    }
}

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

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

到此这篇关于Kotlin开发中open关键字与类名函数名和变量名的使用方法浅析的文章就介绍到这了,更多相关Kotlin open关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android原生定位服务LocationManager

    Android原生定位服务LocationManager

    这篇文章主要为大家介绍了Android原生定位服务LocationManager实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Android recycleView的应用和点击事件实例详解

    Android recycleView的应用和点击事件实例详解

    这篇文章主要介绍了Android recycleView的应用和点击事件实例详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • Android Studio3.6.3 当前最新版本数据库查找与导出方法(图文详解)

    Android Studio3.6.3 当前最新版本数据库查找与导出方法(图文详解)

    这篇文章主要介绍了Android Studio3.6.3 当前最新版本数据库查找与导出方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android实用的代码片段 常用代码总结

    Android实用的代码片段 常用代码总结

    这篇文章主要介绍了Android实用的代码片段 常用代码总结,需要的朋友可以参考下
    2014-09-09
  • Android编程内存溢出与防范方法浅析

    Android编程内存溢出与防范方法浅析

    这篇文章主要介绍了Android编程内存溢出与防范方法,较为详细的分析了Android内存溢出的常见原因与相应的防范措施,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • 解决java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper问题

    解决java.lang.NoClassDefFoundError: android.support.v4.animati

    这篇文章主要介绍了解决Android Studio出现java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper的问题,感兴趣的朋友一起看看吧
    2021-08-08
  • Android Support Palette使用详解

    Android Support Palette使用详解

    这篇文章主要介绍了Android Support Palette使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Kotlin扩展方法超详细介绍

    Kotlin扩展方法超详细介绍

    Kotlin 可以为一个不能修改的或来自第三方库中的类编写一个新的函数。 这个新增的函数就像那个原始类本来就有的函数一样,可以用普通的方法调用,这种机制的函数称为扩展函数
    2022-09-09
  • Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)

    Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)

    Android中Textview和图片同行显示,文字超出用省略号显示,图片自动靠右边。看到这个问题本来认为是一个很正常的需求,看起来很简单,但是做起来却遇到了很蛋疼的问题,怎么搞的都不行,堵了很长时间,下面说一下解决的方案,希望遇到这样问题的朋友可以使用。
    2016-12-12
  • Flutter多项选择弹窗实现详解

    Flutter多项选择弹窗实现详解

    这篇文章介绍了Flutter多项选择弹窗实现详解,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2021-11-11

最新评论