1
10
与其将Legs作为抽象类的字段,不如将其仅作为属性(删除setter),并将其抽象化。
在狗身上
|
2
11
在某种程度上,这违背了OO原则。你的超类动物提供一个合同,其中包括设置/获取腿。然后您希望子类能够限制该接口以禁止set Legs。由于子类化提供了“is-a”关系,因此限制接口与此相反,这意味着子类将不是真正的子类型,因为set Legs方法不存在。
|
3
5
在Java中,getter和setter是最终的方法,因此它们不能被重写。在C#,我相信你想要的关键字是“sealed”;您可以密封方法,但不能密封整个子类。
|
4
4
? 我猜你永远不会想把章鱼归为四足动物。
|
5
4
你的问题意味着这些类代表
如果是这样的话,你不会真的想要一个二传手
相反,要求在一个受保护的
如果你以后决定
|
6
1
|
7
1
OOSC
. 这里使用的术语是
不变遗传
. 给出的例子是
has become available through Spec# 关于 这不合适
编辑(解决方案已封存,后续跟进) this根据其中一个线程的要求,这里有一个小示例,用于阻止成员的进一步继承(这里的许多人认为这是对OO的违反,而语言设计者清楚地知道这不是):
|
8
0
您还可以考虑如果有人创建了一个变量、参数或类型Animal,然后试图设置它的Legs属性,会发生什么。如果它是不允许设置其分支的子类之一,您会抛出特定的异常吗? 例如。
|
9
0
在动物的子类中,将Leg属性的set访问器设为私有。
这将阻止狗的任何衍生设置腿属性。 |
10
0
如果可以在同一范围内为同一属性定义不同的覆盖和阴影实现(覆盖只有在基类中访问属性时才使用),那就更好了,但我不知道有什么方法可以做到这一点。 |