上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
细节23 变化莫测——多态
多态是一种机制,当父类的某个方法被多个子类重写后,将不同的子类对象赋值给父类对象的引用,可以产生不同的功能,这就是多态。实际上,多态也表现为将实现接口的类创建的对象赋值给接口的引用,以完成不同实现类的功能,这个多态的主要特性可以方便程序开发和代码维护。
父类Polygon的代码示例:
public class Polygon { public void showArea (){ // 父类用于显示面积的方法 } }
子类Rectangle的代码示例:
public class Rectangle extends Polygon { private float width; // 定义矩形的宽度 private float height; // 定义矩形的高度 public Rectangle (float width , float height){ // 初始化宽度和高度 this. width = width; this. height = height; } public void showArea () { // 重写父类中显示面积的方法 float area = width * height; // 计算矩形的面积 System. out. println ("矩形的面积是:" + area); } }
子类Triangle的代码示例:
public class Triangle extends Polygon { private float sideWidth; // 定义三角形底边的长度 private float height; // 定义三角形的高 public Triangle (float sideWidth , float height){ // 初始化三角形底边的长度和高度 this. sideWidth = sideWidth; this. height = height; } public void showArea () { // 重写父类中显示面积的方法 float area = (sideWidth * height) / 2.0f; // 计算三角形的面积 System. out. println ("矩形的面积是:" + area); } }
测试类的多态性示例:
public class Test { public static void main (String[] args) { ❶Polygon polygon = new Rectangle (20,40); // 使用子类Rectangle创建父类的实例 ❷polygon. showArea (); // 调用显示面积的方法 ❸polygon = new Triangle (20,40); // 使用子类Rectangle创建父类的实例 ❹polygon. showArea (); // 调用显示面积的方法 } }
运行本示例,程序将输出如图5.19所示的信息。
图5.19 多态的输出结果
说明
由于在标记❶处将子类Rectangle创建的对象赋值给了父类的引用,所以在标记❷处调用的showArea ()方法是子类Rectangle中的方法,因此输出了如图5.19所示的第一行信息;在标记❸处将子类Triangle 创建的对象赋值给了父类的引用,所以在标记❹处调用的showArea ()方法是子类Triangle中的方法,因此输出了如图5.19所示的第二行信息。