|
|
1
11
如果…否则…(或switch或visitor),多态性之间是模块化的。有一个所谓的开放-关闭原则,这基本上意味着,当你向一个现有的程序添加一个新特性时,你对现有代码所做的更改越少越好(因为每一个更改都需要一些工作,并且可能引入错误)。因此,让我们比较一下变化的数量:
所以如果…否则…或者说多态性:这取决于模块化。如果希望稍后添加许多新的子类,请使用多态性;如果希望稍后添加许多新方法,请使用if…else…,并且在类中只放置最“基本”的方法,如访问器。或者换言之:当你期望有很多如果…否则…分支,你更应该使用多态性,当你期望很少这样的分支时,只需留下if…else… 另外:当你期望很少,如果…否则…分支,但是在很多地方,如果……否则,您应该考虑封装这个。使用Visitor模式,或者只为每个分支创建一个具有单独大小写的枚举。 |
|
|
2
3
这个想法是,你不必关心你要处理的是什么样的形状。例如,如果shape定义了一个abstract draw()方法,那么三角形、正方形和任何其他扩展形状的方法也将相同。 多态性的一个简单定义是“将不同的类型视为相同的类型”,即使用相同的接口。 在一个理想的世界中,我们不需要担心我们要处理的对象的具体类型,只需要一个更通用的类型的接口,它涵盖了接口中的所有使用场景。
在这段代码中,我们直接调用p1和p2上的shape.draw()。我们不关心实现类做什么,只关心接口(或抽象父类)定义了什么。 编辑: 对于问题中的示例,通常建议尽可能通过封装行为来避免这种代码模式。使用instanceof可以被视为一种代码味道,因为每当添加一个新类时,都必须更新所有条件。 |
|
3
2
考虑以下内容
一
你不需要知道你是否在处理
另外,看看 how the docs are explaining it 。 |
|
|
4
1
这不是一个很好的例子,但下面是您的代码的样子。
(考虑到正方形当然会延伸形状) 好多了,不是吗? 至于“为什么更好”,其他答案给出了一些要点。 |
|
|
5
0
多态性允许您根据某个类型更改某个对象的行为。不知道如何用你的例子来解释它,因为你可以直接把它赋给一个正方形,如果因为某种原因它是一个正方形很重要的话。有时您需要子类化,因为它可能具有其他行为等,但请考虑以下示例:
这里的draw方法是多态性的一个例子,因为我们有一个基类形状,它说现在所有的形状都可以自己绘制,但是只有正方形知道如何绘制正方形。 |
|
|
6
0
我假设“shape”是一个接口,“square”是该接口的一个实现。 现在,如果您需要调用为shape接口声明的方法(典型的例子是shape.getArea()),您不应该关心它是方形的还是其他的,并调用该函数。 |
|
|
7
0
Some people
相信有一个时间和地点
我想你的例子可以通过尝试做点什么来改进
有意义的
(例如绘图、计数边等),因为OOP哲学从根本上避免了您在示例中说明的情况。例如,OOP设计可以声明
作为旁白,如果你在c1为空的情况下,如果它不是一个正方形,或者设置为p1,如果它是,一个类似的“a s”操作符存在,我是它的粉丝。
这不比
|
|
|
user7794336 · Java中从列表路由方法调用的最佳方法 9 年前 |