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中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属 ...
随机推荐
- 使用shiro遇到的问题
Caused by: java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException 解决问题:缺少一个依赖的缓存jar 添加: <d ...
- go切片展开
可以使用 ... 操作符将一个切片追加到另一个切片末尾: package main import ( "fmt" ) func main() { veggies := []stri ...
- (转)使用 HTML5 WebSocket 构建实时 Web 应用
HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...
- 防火墙(入站规则)C++修改方法 以解决服务器无法连接问题
为啥要关注防火墙 今天项目中的p2p直连遇到了问题.经过排查,发现充当服务器的一端进入listen状态后,另外的客户端一端connect失败. 错误码10060(超时). 开始时怀疑客户端connec ...
- luoguP2015(简单树形DP)
题目链接:https://www.luogu.org/problemnew/show/P2015 题意:给定一颗结点个数为n的树,有n-1条边,每条边有个权值,树根为1.现在给出q <=n,问剪 ...
- Find Duplicate Subtrees
Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only ne ...
- 大数据之Hadoop完全分布式集群搭建
1.准备阶段 1.1.新建三台虚拟机 Hadoop完全分市式集群是典型的主从架构(master-slave),一般需要使用多台服务器来组建.我们准备3台服务器(关闭防火墙.静态IP.主机名称).如果没 ...
- 批量删除Maven本地仓库中未下载完成的jar包(不完整的jar包)
1.删除repository库目录下所有后缀名是.lastUpdated的文件 2.进入maven本地仓库地址: CMD进入windows的路径(或在仓库目录的地址栏直接输入CMD,回车自动打开); ...
- 从入门到自闭之Python整型,字符串以及for循环
Day 01 整型: 对比: 在python 2 版本中有整型,长整型long 在python 3 版本中全部都是整型 用于计算和比较 整型和布尔值的转换 二进制转换成十进制: print (in ...
- 屏幕的遮挡层,js得到屏幕宽高、页面宽高 (window.screen.availHeight)等--
window.screen.availWidth 返回当前屏幕宽度(空白空间) ------当手机有输入法的时候,要注意................window.screen.availHeigh ...