前言
简单记录下一下Kotlin中子类和子类型的相关知识,方便自己查阅。
小结
-
子类是继承的概念,如果B继承A,则B就是A的子类。
-
如果需要使用类型A的变量时,可以使用类型B的变量来代替,则此时类型B就是A的子类型。
在需要使用时,用子类去替代父类,此时子类就是父类的子类型。
正文
子类是继承的概念,如果B继承A,则B就是A的子类。如果需要使用类型A的变量时,可以使用类型B的变量来代替,则此时类型B就是A的子类型。
一般情况下,编程语言只考虑了子类关系,子类说明是一个新类继承了父类,而子类型则是强调了新类具有父类一样的行为,这个行为不一定是继承。
继承与子类型
如果B类是A类的子类,则B就是A的子类型。当新类的行为与父类完全一致,在任何使用父类的场合,新类都表现一致的行为,此时可以使用继承。
open class Animal { fun bathe() { println(" 洗澡…") } } class Cat : Animal() fun work(animal: Animal): Unit { animal.bathe() }
var cat = Cat() work(cat)
-
Cat继承Animal,也就是说Cat是Animal的子类。
-
然后work()中传入cat,而且可以运行成功,说明Cat类是Animal类的子类型。
如果A类不是B类的子类型,则不可以代替B类做一些事情。
接口与子类型
如果B类实现了接口A,则B类就是接口A的子类型,例如String类实现了CharSequence接口,String类就是接口CharSequence的子类型。
参考文章
历史上的今天
随机推荐
蒋勋 : 孤独的乐趣
与孤独相处的时候,可以多一点思维的空间,生命的过程会不会更细腻一点?——蒋勋禅宗有一则有趣的故事,小徒弟整天跟老师父说:“我心不安,我心不安。”他觉得心好慌,上课没有心上课,做功课没有心做功课,问老师父到底该怎么办?师父拿出一把刀,说:“心拿出来,我帮你安一安。”心一直在自己身上,心会不安,是被...
open failed EACCES (Permission denied)
前言最近Android 10上读取文件时,出现如下异常:03-27 01:07:14.882 W/System.err(18732): java.io.FileNotFoundException: /storage/udisk2/wawa.mp3: open failed: EACCES (P...
Launcher2之拖拽事件
在分析Launcher2的拖拽(触摸)事件之前,我们必须知道Android中事件的分发、拦截和处理机制。有兴趣的可以看看《Android触摸事件简单分析》。不过,我这里再次简单总结一下:1、事件一定是先到达父控件上。2、事件简单来说可以分为三种:Down事件、Move事件、Up事件。...
JNI之类型介绍
前言之前对JNI基本的使用以及很熟悉了,但也是值得部分基础内容,这次就记录一下JNI中的基础类型,方便自己查阅。正文之前我们知道,JNI中是不认识java类型的(int好像认识,哈哈),比如我们之前的boolean在JNI是jboolean类型,之前涉及的类型不对,今天就深入了解一下其他类型...
[摘]Java去除字符串中的空格
前言这篇文件是关去除空格符的,之前也想整理一下,但迟迟没有,因此今天有空摘抄于此。下面只是用了Java提供的两种方式,一种只是去除文末或开头的trim(),另外一种是用replaceAll()正则表达式匹配。本文摘抄,具体原文链接在文末。正文String.trim()String.tr...
CountDownTimer音量值淡入淡出
前言有时候播放开始播放和暂停时,需要做一个淡入淡出的效果,要不然急速暂停或播放,容易出现尖锐的杂音。正文显示对MediaPlayer播放和暂停时音量淡入和淡出代码片段。隐藏内容!付费阅读后才能查看!¥1 ¥3多个隐藏块只需支付一次付费阅读
草率了没记录完