谁能向我解释一下使用类型替换的必要性是什么?
例如
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();
}
可以轻松完成所需的工作。
最佳答案
这种现象称为通过继承实现的多态性。这意味着您的行为是在运行时决定调用哪个对象而不是调用哪个引用。
嗯。让我们进一步扩展你的例子。让我们首先创建类层次结构
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
,甚至不知道它如何绘制的机制是从中抽象的。可以更改绘制特定形状的底层机制,而不会影响此类。
关于java - 为什么使用类型替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651066/