- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是一个例子,我只是好奇它是如何实现的。
我只想让 Animal
的子类能够设置它们的腿数,但我仍然希望它们能够设置自己的颜色。因此,我想在层次结构中进一步限制类,然后更改此 Legs
属性。
public abstract class Animal
{
public string Colour { get; protected set; }
public int Legs { get; protected set; }
public abstract string Speak();
}
public class Dog : Animal
{
public Dog()
{
Legs = 4;
}
public override string Speak()
{
return "Woof";
}
}
public sealed class Springer : Dog
{
public Springer()
{
Colour = "Liver and White";
}
}
public sealed class Chihuahua : Dog
{
public Chihuahua()
{
Colour = "White";
}
public override string Speak()
{
return "*annoying* YAP!";
}
}
比如我要剔除这种子类:
public sealed class Dalmatian : Dog
{
public Dalmatian()
{
Legs = 20;
Colour = "Black and White";
}
}
这将如何实现?
我知道我可以通过密封父类中函数的实现来停止子类中的覆盖。我尝试使用 Legs
属性进行此操作,但无法正常工作。
谢谢
最佳答案
在某种程度上,这违反了 OO 原则。您的父类(super class) Animal 提供了一份契约(Contract),其中包括 Legs 的设置/获取。然后,您希望子类能够限制该接口(interface)以禁止设置 Legs。由于子类化提供了一种“is-a”关系,限制接口(interface)违背了这一点,这意味着子类不会是真正的子类型,因为 set Legs 方法不存在。
我会从 Animal 中删除 Legs 属性的 setter ,因为那是一个实现细节。取而代之的是简单地有一个抽象的 setter/getter 。然后,子类可以通过返回硬编码值或使用字段来存储值来决定如何最好地实现它。
关于c# - 如何限制层次结构中的覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3344399/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!