下面这段代码摘自《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的精髓,我们是可以写出更优雅的代码的。