Java向上转型的妙用
下面这段代码摘自《java编程思想》,内容稍有修改
class Sharp{
public void erase(){
...
};
public void draw(){
...
};
}
class Circle extends Sharp{
public void erase(){
System.out.println("扩大十倍");
};
public void draw(){
System.out.println("画个圆");
};
...
}
class Triangle extends Sharp{
public void erase(){
System.out.println("缩小十倍");
};
public void draw(){
System.out.println("画个三角");
};
...
}
void doSomething(Sharp sharp){
sharp.erase();
sharp.draw();
}
如此,就可以这样使用doSomething(Sharp sharp):
Circle circle = new Circle();
Triangle triangle = new Triangle();
doSomething(circle);
doSomething(triangle);
而,如果我们不使用向上转型,那么我们在编写doSomething的时候就需要做个判断,判断传进来的是cirlcle还是triangle,然后再执行相应的方法。
条件判断在代码编写中司空见惯,经常就是条件反射式的就用上了,可能就让代码变得杂乱不堪。其实如果去探究java的精髓,我们是可以写出更优雅的代码的。