Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop Crystal-如何在父类的子类之间共享属性和/或类型_Oop_Crystal Lang - Fatal编程技术网

Oop Crystal-如何在父类的子类之间共享属性和/或类型

Oop Crystal-如何在父类的子类之间共享属性和/或类型,oop,crystal-lang,Oop,Crystal Lang,我相信这是一个普通的OOP问题,但我使用的是Crystal 如果我的子类需要共享一个类型,但该类型不是父类,那么处理这种情况的正确方法是什么。例如,假设我有动物:猫和狗,我还有小动物:小猫和小狗。我希望小猫和小狗成为他们自己的类型,有他们自己的“父母”方法 类动物 结束 类狗

我相信这是一个普通的OOP问题,但我使用的是Crystal

如果我的子类需要共享一个类型,但该类型不是父类,那么处理这种情况的正确方法是什么。例如,假设我有动物:猫和狗,我还有小动物:小猫和小狗。我希望小猫和小狗成为他们自己的类型,有他们自己的“父母”方法

类动物
结束
类狗<动物
结束
猫类<动物类
结束
小狗类
财产?需要牛奶=真的
结束
小猫类<猫类
财产?需要牛奶=真的
结束
我知道,如果我只需要一些属性或方法,我可以通过mixin实现这一点:

婴儿模块 财产?需要牛奶=真的 结束 但是对于我的实际用例,我想保证数组的所有成员都是“BabyAnimals”(因此具有幼兽方法和属性),即

小猫小狗的<代码>[] 所以感觉继承是唯一/正确的方法


还是我遗漏了什么?

模块是类型层次结构的一部分。如果您使用类型限制
BabyAnimal
,可以确保它只匹配包含该模块的类型

Kitten.new.is_a?(BabyAnimal) # => true

array = [] of BabyAnimal
array << Kitten.new
array << Puppy.new
Kitten.new.a?(BabyAnimal)是真的吗
数组=[]的BabyAnimal

数组中的所有成员?什么阵列?你提供的代码中没有数组。这一点很好,编辑后包含了一个通用数组示例,以显示我以前的理解。哇,Crystal太棒了!这正是我所期望的,现在我看到这一点似乎很明显,我只是没想到这么简单和合乎逻辑的东西能如此无缝地工作。