kotlin面向对象之抽象类、继承、多态
继承:
比较简单,直接看如何使用,这里以父亲与儿子的关系为例:

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

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

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

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

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

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

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

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

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

这时再重新执行:

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

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

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

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

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


接下来使用一下:

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

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


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

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

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

编译运行:

kotlin面向对象之抽象类、继承、多态的更多相关文章
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- PHP 面向对象:抽象类继承抽象类
抽象类继承另外一个抽象类时,不用重写其中的抽象方法.抽象类中,不能重写抽象父类的抽象方法.这样的用法,可以理解为对抽象类的扩展. 下面的例子,演示了一个抽象类继承自另外一个抽象类时,不需要重写其中的抽 ...
- C# 面向对象基础&封装&继承&多态&加深一下冒泡排序写法
(一)面向对象是什么? 面向对象是一种编程思想 (二)为什么要用面向对象? 1.结构清晰 2.易于维护 3.方便扩展 (三)new一个对象是什么过程? 实例化构造函数创建对象的过程就是将类实例化的过程 ...
- Py修行路 python基础 (十六)面向对象编程的 继承 多态与多态性 封装
一.继承顺序: 多继承情况下,有两种方式:深度优先和广度优先 1.py3/py2 新式类的继承:在查找属性时遵循:广度优先 继承顺序是多条分支,按照从左往右的顺序,进行一步一步查找,一个分支走完会走另 ...
- Python面向对象,析构继承多态
析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- C#基础总结之八面向对象知识点总结-继承与多态-接口
.方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...
- javascript 学习笔记之面向对象编程(二):继承&多态
~~接上篇~~上一篇实现了类的实现以及类成员变量和方法的定义,下面我们来了解下面向对象中两个最重要的特性:继承和多态. 继承 js中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属 ...
随机推荐
- DNS_主从搭建
一.DNS简介 1.DNS DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库.有了DNS服务器,我们只需要记录一个网站的域名即可访问,而再也不 ...
- Go语言入门篇-网络经验
Go语言学习手册 golang*看云 golang圣经 wuYinIO 1.go语言开发中的坑 go新手容易犯的三个致命错误 Golang 需要避免踩的 50 个坑 2.go语言数据类型 map ...
- 上课笔记:awk
awk [单独的编程语言解释器]1.awk介绍 全称:Aho Weinberger Kernaighan 三个人的首字母缩写: 1970年第一次出现在Unix机器上,后来在开源领域使用它: 所以,我 ...
- [转帖]linux下使用 du查看某个文件或目录占用磁盘空间的大小
linux下使用 du查看某个文件或目录占用磁盘空间的大小 du -ah --max-depth= 去年用过一次 后来忘记了.. 命令这个东西 熟能生巧.. https://www.cnblogs.c ...
- Spread.NET 表格控件 V12.1 正式发布
Spread.NET 表格控件 V12.1 正式发布 加入动态数组,让公式运算更具效率 Spread.NET 是一个在功能和布局上与 Excel 高度类似的 .NET表格控件,目前已广泛应用于财务.预 ...
- 医院医疗类报表免费用,提反馈,还能赢取P30!
医院医疗类报表免费用,提反馈,还能赢取P30! “葡萄城报表模板库是一款免费的报表制作.学习和参考工具,包含了超过 200 张高质量报表模板,涵盖了 16 大行业和 50 多种报表类型,为 30 余万 ...
- 水晶报表和rdlc报表传入参数筛选
在使用报表向客户展示结果数据时,实时的在报表中显示某些特定的数据是必需的,如:显示的部门.打印的日期等.本文只简单的演示向报表内传入一个字符值. 以下是设计好报表之后传入参数的具体操作 一.首先是水晶 ...
- 小菜鸟之oracle数据字典
oracle数据字典 一.数据字典 数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心,它是一组提供有关数 ...
- RuntimeError: Model class user.models.User doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Django 2.x版本迁移数据库报这个错误,user表使用的Django的验证系统 本来就想改一下用户表的表名,莫名的报了个这个错误,在网上找到了解决办法 打开user应用模块下的apps.py文件 ...
- python-day31(正式学习)
一.单机架构 应用领域: 植物大战僵尸 office 二.CS架构 应用领域: QQ 大型网络游戏 计算机发展初期用户去取数据,直接就去主机拿,从这里开始就分出了客户端和服务端. 客户端:用户安装的软 ...