![]() |
1
9
我相信你应该重新考虑你的继承等级制度。考虑以下启发式方法: 如果两个或多个类只共享公共数据(没有公共行为),那么该公共数据应该放在每个共享类所包含的类中。 如果两个或两个以上的类具有公共数据和行为(即方法),那么这些类都应该继承自捕获这些数据和方法的公共基类。 如果两个或多个类只共享一个公共接口(即消息,而不是方法),那么只有当它们将被多态使用时,它们才应该从公共基类继承。 |
![]() |
2
2
恐怕无法隐藏派生类中的成员。(这违背了继承规则)要解决这个问题,可以有两个抽象类级别。在第一级中,有一个包含所有派生类中的所有成员的基类,在第二级中,可以有只包含您想要的成员的特殊类从这个类继承下来。
|
![]() |
3
1
不能删除/隐藏派生类中的方法或属性,因为这与Liskov的替换原则相矛盾。 可以重写属性以引发异常,但这不是一个好的设计。 在一个类中,您应该只有在这个类中实际有效的成员。 也许您想定义几个具有您的属性的接口,并让每个类实现您需要的接口。 |
![]() |
4
1
如果您不介意反射和投射,您可以使用助手方法尝试类似的方法。下面的示例假设订单有一个基类,但此处没有显示:
一个朋友给我看了这个小图案,谢谢你的午睡。如我所说,它使用反射和投射,但可以使对象模型在处理基类时非常优雅。 |
![]() |
5
0
这里有一些规则在起作用。 如果您有一个带有虚拟属性的抽象类,那么它们可以是受保护的,也可以是公共的,这就是外部世界将看到的。扩展/继承此类时,可以重写这些属性,但不能将它们标记为私有。私有是从派生类隐藏属性的唯一方法。在抽象类中拥有私有属性将使其对子类隐藏。但在你的场景中显然不是这样。 |
|
simply lemon · python上链表的添加方法 1 年前 |
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
![]() |
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
![]() |
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
![]() |
Andy Votava · 从父类定义调用学生方法 1 年前 |