枚举:

由于这个比较简单,直接上代码:

kotlin面向对象之枚举、印章类-LMLPHP

下面使用一下:

kotlin面向对象之枚举、印章类-LMLPHP

印章类【Sealed class】:

听着挺新鲜的,下面以一个具体的场景来对它进行学习:

kotlin面向对象之枚举、印章类-LMLPHP

动物园里有三个动物如下,在天黑时它们污污的在做“游戏”,于是乎会发生如下关系:

公马 + 母驴  = 骡子

公驴 + 母驴 = 小驴

而这种场景刚好就可以用这个印章类来描述,下面看下代码:

kotlin面向对象之枚举、印章类-LMLPHP

而咱们这个例子最终的产出只有两种类型:小骡子和小小驴,不可能有其它类型,在Kotlin中针对这种场景就诞生出了印章类,那具体表现是怎么样的呢?

kotlin面向对象之枚举、印章类-LMLPHP

接着在它里面声明指定的类型,如下:

kotlin面向对象之枚举、印章类-LMLPHP

接着在Son类中可以增加一个方法:

kotlin面向对象之枚举、印章类-LMLPHP

接下来应用一下:

kotlin面向对象之枚举、印章类-LMLPHP

因为它只能用它里面指定的类型,类似于跟枚举一样,具体使用如下:

kotlin面向对象之枚举、印章类-LMLPHP

接下来则可以多生成几个儿子,并放一个集合中进行遍历:

kotlin面向对象之枚举、印章类-LMLPHP

kotlin面向对象之枚举、印章类-LMLPHP

所以可见印章类其实就是子类类型有限的class。

总结:

貌似印章类其实跟枚举是很类似的,都是限定了类型,但是它们俩还是有区别的,如下:

Sealed class更在意类型;枚举更在意数据。

05-25 15:37