为了加强记忆,诗忆总会整理前一晚的笔记。
「可是,要怎麽确保每个类别都有toString()
函式呢?」窗上映着女孩百思不解的脸。「之前学姐写的自定义类别也没看到这个函式呀。」
笔电在诗忆的操作下跑了一个简单的程序。
fun main() {
println(Empty())
}
class Empty
「嗯⋯⋯就连空的class
都有toString()
,虽然出来的是诡异的结果Empty@5b2133b1
,我记得学姐说小老鼠符号後是物件存放的记忆体位置。那我用昨天学的函式搜寻法,看看空的class
有哪些函式。」
结果浮出了三个方法,equals()
、hashCode()
和toString()
。
其中hashCode()
印出的值是1528902577
。
「我的第六感和我说toString()
的值和hashCode()
的值有关系。啊,5b2133b1
的十六进位转换成十进位不就是1528902577
吗!」
她找到了答案,非常开心。等不及到晚上的授课时间就联络了唯心,相约在学校的白色咖啡屋见面。
一见到唯心之後,诗忆就迫不急待的分享她的发现。
「对唷,所有的类别都继承了Any
类别,这三个方法就是Any
类别提供的,反过来说,Any
类别就是所有类别的先祖superclass
。」唯心看着女孩因自己肯定的话语露出更加开心的笑容,嘴角也浮出浅浅的笑意。「这些继承来的函式是可以覆写的,如果已经被覆写还想呼叫先祖的函式内容,就用super.
开头,和superclass
这个名字呼应着,很好记唷。」
「所有函式都可以覆写吗?」诗忆问。
「可继承的类别只有两种,open class
和abstract class
,前者和一般的类别没有差别,只需要在开放覆写的函式也加上open
,後者的函式则是加上abstract
。还有一个不是类别但可以覆写的存在——介面interface
,里面的函式什麽都不用加就可以开放覆写。」唯心想了想又诚实的加上一句。「他们三者的用途差异很多人都难以分清呢。」
「⋯⋯」诗忆觉得自己就是其中一员。
看着女孩呆呆傻傻的样子,唯心噗哧一笑,忍不住捏了捏她的脸。「你还有我呢。」
「interface
最常被使用的原因是,相对於一个类别一次只能选择一个可继承类别作为根基继承,interface
却可以同时扩展好几个,自由度高。而open class
和abstract class
的分别主要在於後者不能实体化,只负责让其他类别继承。而拿实际的东西来举例的话——」就在她烦恼哪个例子比较好说明时,一只优雅的猫咪跳进她的怀里。
「学姐我想摸摸猫咪。」诗忆说着就小心地挪动步子靠过去。
猫咪趴在唯心的膝盖上,懒洋洋地看了一眼诗忆,没有避开她的手。
等诗忆满足的回到她的座位後,唯心才继续刚刚的话题。「以手机为例,abstract class
是主机板,要等外壳和其他零件装上後才能出售;open class
是已经可以出售的手机,但提供客制化容量的选择;interface
是各种配件,如耳机一般能搭配手机也能搭配电脑,但单独存在时没有办法使用。」
大家好~ 今天来实作下图架构的简单版吧! 申请服务帐户 选择一个 Dialogflow 的 Agen...
前言 昨天的文章讲完前端 Nginx 的写法後,今天就要来进入後端的写法啦!在昨天的小结提到後端的写...
RAID tags: IT铁人 这个硬碟有多棒 在评断一个硬碟有多高的Availability时,我...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 选取元素 ⚠️ 避免使用会常常变的s...
Youtube 频道:https://www.youtube.com/c/kaochenlong ...