Oop Crystal-如何在父类的子类之间共享属性和/或类型
我相信这是一个普通的OOP问题,但我使用的是Crystal 如果我的子类需要共享一个类型,但该类型不是父类,那么处理这种情况的正确方法是什么。例如,假设我有动物:猫和狗,我还有小动物:小猫和小狗。我希望小猫和小狗成为他们自己的类型,有他们自己的“父母”方法Oop Crystal-如何在父类的子类之间共享属性和/或类型,oop,crystal-lang,Oop,Crystal Lang,我相信这是一个普通的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太棒了!这正是我所期望的,现在我看到这一点似乎很明显,我只是没想到这么简单和合乎逻辑的东西能如此无缝地工作。