2014-09-03 34 views
0

任何人都可以向我解释什么是使用类型替换的需要?为什么使用类型替换

例如

class Circle extends Shape{ 
    ... 
} 

. 
. 
. 

class Main{ 
    public static void main(String[] args){ 
     Shape s = new Circle(); 
     ... 
    } 
} 

从上面的代码中我们可以得到什么样的好处?通常情况下,

public static void main(String[] args){ 
    Circle c = new Circle(); 
} 

会很容易地完成所需的工作。

+0

这里讨论这样的通用问题是不合时宜的。 – talex 2014-09-03 18:23:14

+0

也许下面会有帮助吗? http://stackoverflow.com/questions/11064409/why-to-use-polymorphism – 2014-09-03 18:24:34

+0

因为真正的程序比这个玩具的例子复杂得多。 – chrylis 2014-09-03 18:35:10

回答

3

该现象通过继承被称为多态性。这意味着你的行为在运行时决定在哪个对象被调用,而不是由它被调用的引用决定。

好吧。让我们进一步扩展您的范例让我们先创建的类层次

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,甚至不知道它如何绘制的机制是从中抽取。绘制特定形状的底层机制可以在不影响该类的情况下进行更改。

+0

谢谢,这有助于... – bytestorm 2014-09-03 18:35:27

+0

不客气。 – Adi 2014-09-03 18:39:51

相关问题