实例说明
当顾客在商场购物时,卖家需要根据顾客的需求提取商品。对于汽车销售商场也是如此。用户需要先指定购买的车型,然后商家去提取该车型的汽车。本实例将实现一个简单的汽车销售商场,用来演示多态的用法。
实现过程
新建一个抽象类,名称为Car,在该类中定义一个抽象方法getInfo()。
Car.java
public abstract class Car {
public abstract String getInfo();
}
再创建一个名称为BMW的类,该类继承自Car并实现其getInfo()方法。
BMW.java
public class BMW extends Car {
@Override
public String getInfo() {
return "BMW";
}
}
再创建一个名称为Benz的类,该类继承自Car并实现其getInfo()方法。
Benz.java
public class Benz extends Car {
@Override
public String getInfo() {
return "Benz";
}
}
再创建一个名称为CarFactory的类,该类定义了一个静态方法getCar(),它可以根据用户指定的车型来创建对象。
CarFactory.java
public class CarFactory {
public static Car getCar(String name) {
if (name.equalsIgnoreCase("BMW")) { //如果需要BMW则创建BMW对象
return new BMW();
} else if (name.equalsIgnoreCase("Benz")) { //如果需要Benz则创建Benz对象
return new Benz();
} else { //暂时不能支持其他车型
return null;
}
}
}
再创建一个名称为Customer的类,用来进行测试。在main()方法中,根据用户的需要提取不同的汽车。
Customer.java
public class Customer {
public static void main(String[] args) {
System.out.println("顾客要购买BMW");
Car bmw = CarFactory.getCar("BMW"); //用户要购买BMW
System.out.println("提取汽车:" + bmw.getInfo()); //提取BMW
System.out.println("顾客要购买Benz");
Car benz = CarFactory.getCar("Benz"); //用户要购买Benz
System.out.println("提取汽车:" + benz.getInfo()); //提取Benz
}
}
编译运行
$ javac Car.java BMW.java Benz.java CarFactory.java Customer.java
$ java Customer
顾客要购买BMW
提取汽车:BMW
顾客要购买Benz
提取汽车:Benz
技术要点
本实例应用的主要技术就是面向对象程序设计中的多态。多态是面向对象程序设计的基本特性之一。使用多态的好处就是可以屏蔽对象之间的差异,从而增强了软件的扩展性和重用性。Java的多态主要是通过重写父类(或接口)中的方法来实现的。对于香蕉、橘子等水果而言,人们通常关心其能吃的特性。如果分别说香蕉能吃、橘子能吃,则当再增加新的水果种类,如菠萝时还要写个菠萝能吃,这是非常麻烦的。使用多态的话可以写成水果能吃,当需要用到具体的水果时,系统会自动帮忙替换,从而简化开发。