请用对象表述人只有男人和女人这个问题看起来很简单:
classHuman{}
classManextendsHuman{}
classWomanextendsHuman{}然后我们根据这个定义了一个方法
voidfn(Humanh){
if(hinstanceofMan){
Manm=(Man)h;
}else{
Womanw=(Woman)h;
}
return;
}这样世界看起来很美好,但是有一天外星人来了,人类多了一种:
classFooBarextendsHuman{}然后有人这样调用fn
fn(newFooBar());Boom!!!! 虚拟机炸了。我们再回到最初的问题:请用对象表述人只有男人和女人问题出在只有这两个字上,其实我们是想要:
一个类(Human)只有特定的子类(Man,Woman)
除了这些类外,它(Human)不能再被继承
它的子类(Man,Woman)可以被继承
这样的类被称作密封类(sealed class )相关资料:https://www.kotlincn.net/docs/reference/sealed-classes.html它可以看做是类的封装的一个枚举,是枚举类的扩展,目前C# ,Kotlin 等面向对象语言都已支持,(Java不支持(好像))。下面以Kotlin 为例:
要声明一个密封类,需要在类名前面添加修饰符。
sealedclassHuman
classMan() :Human()
classWoman() :Human()
领取专属 10元无门槛券
私享最新 技术干货