• kotlin面向对象之抽象类、继承、多态


    继承:

    比较简单,直接看如何使用,这里以父亲与儿子的关系为例:

    接着定义儿子并且继承父亲,如下:

    是用":"号来继承的,但是此时报错了,看下错误提示:

    在kotlin的类并非是人人都可以继承的,从提示来看说Father是一个final类型的,好奇怪,也没对Father类声明为final呀,要想解决这个问题,这时需要在Father类中增加一个关键字"open",顾名思议就是将其类开方嘛,如下:

    这时发现Son就正常可以编译了:

    这也就是Kotlin继承的语法,记住就成,接下来使用一下:

    由于儿子是受过高等教育的人,所以其行为跟父亲是有区别的,所以这里就涉及到子类覆盖父类的方法重新定义行为啦,那在kotlin具体如何重写父类的方法呢?这里需要使用override关键字啦,这其实跟java类似,如下:

    可是还是报错了,看提示:

    可见在kotlin当中,默认都是final行为,要想被子类覆盖,还得用open关键字将其开放,如下:

    当然这时Son也就编译正常啦:

    这时再重新执行:

    抽象类:

    当然也是直接看语法啦,面向对象的语言都类似,这里以人为例:

    这时咱们要将eat()方法声明为抽象方法,其实现有具体子类来决定,如何搞呢?

    将其方法体删掉,这时报错了,看错误提示:

    也就是说需要在方法上显示的声明为抽象的,所以加上:

    这个跟java类似,不多解释,抽象类定义好之后,接下来定义具体子类来继承这个抽象类,这里用男人和女人为例:

    接下来使用一下:

    多态:

    多态其实就是同种功能的不同表现形态,这里不多解释了,直接看代码,这里举个什么例子呢?对于男人和女人来说都有一个相同的功能:撒尿,但是!公认的男人与女人撒尿的形态是不一样的嘛,所以下面在人类类中定义一个撒屎的行为:

    接着子类得实现这个抽象方法啦,如下:

    接下来使用一下它,为了体现多态的好处,这里多定义几个人类,如下:

    接下来将这个人类放到一个集合当中,怎么搞呢?这个之前已经使用过,下面看代码:

    下面则可以遍历调用一个通用的行为既可将不同人的具体行为给展示出来,如下:

    编译运行:

  • 相关阅读:
    .NET Core自定义TagHelper和使用Serilog
    .NET Core CSRF
    jq 获取表单全部数据
    Webuploader 简单图片上传 支持多图上传
    CF-1451 E Bitwise Queries 异或 交互题
    CF-1440C2 Binary Table (Hard Version) (构造,模拟)
    CF-1445 C
    ACM模板_axiomofchoice_extra
    Codeforces Round #678 (Div. 2) 题解 (A-E)
    Oracle数据同步
  • 原文地址:https://www.cnblogs.com/webor2006/p/8308961.html
Copyright © 2020-2023  润新知