zoukankan      html  css  js  c++  java
  • Kotlin继承与重写重要特性剖析

    继续Kotlin的面向对象之旅。

    继承:

    在Java中我们知道除了final类不能被继承,其它的情况都是可以被继承的,而在Kotlin中的规则是这样的:“在Kotlin中,所有类在默认情况下都是无法被继承的,换句话说,在Kotlin中,所有类默认情况下都是final的”。其实这样更加的人性,因为平常我们写的任何java类都可以被人随时继承,而在Kotlin中只有你开放了继承权限的类才能被其它人继承,下面来看一下:

    其中报错的提示为:

     那要继承,则需要这样做:

    接下来再来看:

    那。。为啥报错了呢?看一下错误提示:

    这里又有一个规则出来:“在Kotlin中,如果一个类没有primary构造方法,那么这个类的每个secondary构造方法就需要通过super关键字来初始化父类型,或者通过其他secondary构造方法完成这个任务,不同的secondary构造方法可以调用父类型不同的构造方法。”,所以,咱们可以这样做:

    重写:

    方法重写:

    只要有类的继承,肯定就会有类方法的重写,所以接下来看一下在Koltin中重写是如何搞滴:

    报错提示:

    是因为Fruit有个不带参的构造方法,所以需要这样写:

    那接下来咱们在子类中来重写父类的方法:

    看下错误提示:

    所以咱们显示的加上override来看下:

    所以:

    可见在Kotlin中增加了很多的关键字,并非平白无故的就增加了,都是为了语义更加的强而增加的,想一想,在Java中对于父类的重写,如果站在子类的角度是不是很难知道该方法是重写的父类的,排除IDE的提示,但是在Kotlin中,我们只要发现方法中有override,肯定就代码是重写了父类的方法了,语义性特别的强。

    接下来继续:

    接下来再来定义一个新的class:

    属性重写:

    错误提示:

    一样的处理办法:

    接下来使用一下:

    另外还有一种重写字段的方法,就是在primary构造当中,如下:

    接下来再来定义一个新的class:

    再定义子类:

    另外有一个细节:

    那。。如果反过来定义呢?

    这个报错是因为得再定义一个set方法才行,如下:

    那么问题来了,为啥var可以重写val属性,而val属性不能重写var? 因为一个val属性相当于一个get方法,是只读;而一个var属性相当于既有get方法又有set方法,基于这个特性,很明显多的可以复写少的,而少的不可能复写多的,所以。。说实话,有点绕~~下面最后再总结一下:

    1、val  可以 override val

    2、var 可以 override val

    3、val 不可以 override var

    本质上,val相当于get方法;var相当于get与set方法

  • 相关阅读:
    Leap Ftp 3.0注册码
    Access数据库导入到MSSQLServer数据库中的三种办法。
    flash上传插件uploadify详解_图片批量上传_更新数据库
    Winform(c#)手机号码归属地查询的实现
    百度再度出现故障,目前很多地区无法正常访问!
    windows 2000/2003 自动重启/定时重启
    js初步学习
    考研之三战讨论
    C++中的map学习
    BUPT 63T 高才生 找最佳基站
  • 原文地址:https://www.cnblogs.com/webor2006/p/11203903.html
Copyright © 2011-2022 走看看