【发布时间】:2011-08-17 17:08:45
【问题描述】:
我正在使用 C#,但我认为这是一个非常通用的 OO 问题。假设我有一个名为 Animal 的类,它具有 LegCount、EyeCount、HasFur、EatsMeat 等属性。
假设我有一个 Animal 的实例 a。假设a 将 LegCount 设置为 4,EyeCount 设置为 2。
现在,我想创建一个 Dog 类型的实例 d,它继承自 Animal。我想用a 的所有值初始化d。我意识到我可以创建一个构造函数或其他一些方法来获取一个 Animal 并吐出一个新的 Dog 并复制所有值,但我希望有一些面向对象的原则/技巧让我有所了解。
我想做的,用简单的英语,是:
创建 Dog 的新实例 d,所有起始值均来自 a。关键是“全部”,而不是单独指定每个属性。
当你设计一个继承自其他类的类时,你不需要列出它继承的所有成员。它只是继承了所有这些。所以我想知道我是否可以在实际实例上“继承值”。
【问题讨论】:
-
就纯粹的 OOP 而言,我认为“[创建] 一个构造函数或其他一些其他方法会采用 Animal 并吐出一个包含所有复制值的新 Dog”实际上 -是——诀窍。您可以定义
Dog(Animal a)形式的构造函数,而不是Dog(int LegCount, int EyeCount, ...)。您可能仍然需要自己进行一对一的分配,但从 OO 的角度来看,这是“诀窍”,AFAIK -
似乎我应该能够说“这是一只动物。给我你能管理的最全面的狗。”带有一两个关键字 =)
-
我同意。顺便说一句,
io在一定程度上可以做到这一点。您实际上可以从实例继承。 iolanguage.com(我知道这对 C# 没有帮助,但 io 很有趣)