类的多态(三)
子类即是父类对象,这一点还需要再强调一下,尤其是在作为方法的参数时,特别好用,可以经常用。
以形状为例。
1、形状shape是一个接口,里面只有一个计算面积的抽象方法。
2、圆Circle是一个类,实现了shape接口,并有一个toString方法。
3、长方形Rectangle类也实现了shape接口,并有一个toString方法。
4、Test测试类,此类中有一个静态方法print,其参数为shape数组,其作用是输出shape数组中的每个对象。同时此类中有main方法,如下图所示:
注意,在本类中,print方法的方法体中其实就是在输出数出的每个对象,就是调用对象的toString方法。在main方法中定义了一个数组c,c中有两个元素,一个半径为3的圆,一个长和宽分别为1和2的长方形,可以通过print方法来输入这两个不同形状的面积,其运行结果如下:
如上的用法经常会看到,当然在方法中不一定是数组,也可以是对象。
如下图中,改变了Test类中的print方法,其参数为一个shape的对象。
在main函数中,=左侧均为父类对象,而右侧调用的均为子类实例,故所用的即为“子类对象即是父类对象”,不需要我们强制去转换,它自己会根据多态来调用相应的子类的方法。
其运行结果为:
赞 (0)