该现象通过继承被称为多态性。这意味着你的行为在运行时决定在哪个对象被调用,而不是由它被调用的引用决定。
好吧。让我们进一步扩展您的范例让我们先创建的类层次
class Shape{
public void draw(){}
}
class Circle extends Shape{
public void draw(){
//mechanism to draw circle
}
}
class Square extends Shape{
public void draw(){
//mechanism to draw square
}
}
现在让我们看看这是如何导致干净的代码
class Canvas{
public static void main(String[] args){
List<Shape> shapes = new ArrayList<>();
shapes.add(new Circle());
shapes.add(new Square());
// clean and neat code
for(Shape shape : shapes){
shape.draw();
}
}
}
这也可以使得松耦合系统
Class ShapeDrawer{
private Shape shape;
public void setShape(Shape shape){
this.shape = shape;
}
public void paint(){
shape.draw();
}
}
在这种情况下帮助,ShapeDrawer
与实际形状非常松散地结合在一起。 ShapeDrawer
甚至不知道它正在绘制哪种类型的Shape
,甚至不知道它如何绘制的机制是从中抽取。绘制特定形状的底层机制可以在不影响该类的情况下进行更改。
来源
2014-09-03 18:26:04
Adi
这里讨论这样的通用问题是不合时宜的。 – talex 2014-09-03 18:23:14
也许下面会有帮助吗? http://stackoverflow.com/questions/11064409/why-to-use-polymorphism – 2014-09-03 18:24:34
因为真正的程序比这个玩具的例子复杂得多。 – chrylis 2014-09-03 18:35:10