java中的多态
利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理。
假如现在要编写一个绘制图形的方法draw(),如果传入正方形对象就绘制正方形,传入圆形对象就绘制圆形,这种场景可以使用重载来实现,定义如下:
public void draw(Square s) { //绘制正方形的方法
}
public void draw(Circular s) {//绘制圆形的方法
}
但是这种写法有个问题,正方形和圆形都是图形,这场景细分的重载方式不仅增加了代码量,还降低了"易用度"。如果定义一个图形类,让它处理所有继承该类的对象,使每个继承图形类的对象作为draw()方法的参数,然后在draw()方法中做一些限定就可以根据不同图形类对象绘制相应的图形。这样处理能很好地解决代码冗杂的问题,同时程序也易于维护。
创建Shape图形类,作为Square正方形和Circular圆形类的父类。创建Demo类,并在该类中创建一个绘图用的draw()方法,参数为Shape类型,任何Shape类的子类对象都可以作为方法的参数,并且方法会根据参数的类型绘制相应的图形。
class Shape{} //图形类
class Square extends Shape{} //正方形类继承图形类
class Circular extends Shape{} //圆形类继承图形类
public class Demo {
public static void draw(Shape s) { //绘制方法
if(s instanceof Square) { //如果是正方形
System.out.println("绘制正方形");
} else if(s instanceof Circular) { //如果是圆形
System.out.println("绘制圆形");
} else { //如果是其他类型
System.out.println("绘制父类图形");
}
}
public static void main(String[] args) {
draw(new Shape());
draw(new Square());
draw(new Circular());
}
}
运行结果如下:
绘制父类图形
绘制正方形
绘制圆形
从本实例的运行结果中可以看出,以不同类对象为参数调用draw()方法,可以处理不同的图形绘制问题。使用多态节省了开发和维护时间,因为程序员无须在所有的子类中定义执行相同功能的方法,避免了大量重复代码的编写。同时,只要实例化一个继承父类的子类对象,即可调用相应的方法,如果需求发生了变更,只需要维护一个draw()方法即可。