package duotai;
//车
interface Car{
String getName();
int getPrice();
}
//宝马
class BMW implements Car{
public String getName(){
return "BMW";
}
public int getPrice(){
return 1000000;
}
}
//奇瑞QQ
class CheryQQ implements Car{
public String getName(){
return "CheryQQ";
}
public int getPrice(){
return 66666;
}
}
//汽车经销商
public class CarShop {
private int money=0;
public void sellCar(Car car){
System.out.println("车型:"+car.getName()+",价格"+car.getPrice()+",所属类:"+car.getClass());
money+=car.getPrice();
}
public int getTotal(){
return money;
}
public static void main(String args[]){
CarShop carshop = new CarShop();
carshop.sellCar(new BMW());
carshop.sellCar(new CheryQQ());
carshop.sellCar(new AODIA6());
System.out.println("销售总收入:"+carshop.money);
//Car bmw = new BMW();
//Car cq = new CheryQQ();
}
}
//程序结果
/*
* 车型:BMW,价格1000000,所属类:class duotai.BMW
* 车型:CheryQQ,价格66666,所属类:class duotai.CheryQQ
* 销售总收入:1066666
*/
/*
* 以上便是多态的简单实例,一个通用的标准,具体的动作交由子类来处理,显然它的基础就是继承。
* 说到多态,就需要将绑定的概念联系在一起。
* 将一个方法调用同这个方法所属的主体(即对象或者是类)关联起来叫做绑定,它可以分为前期绑定和后期绑定两种。
* 前期绑定,是在程序运行之前进行绑定,主要由编译器实现,也称为静态绑定。
* 后期绑定,是在程序运行时进行绑定,由方法调用机制实现,也称为动态绑定。
*
* 多态就是在后期绑定的这种机制上实现的。它消除了类之间的耦合关系,使得程序更容易扩展。说到扩展,也是需要重构原有
* 代码的,这和修改有着本质的区别,需要加以区分。
* 对于上述代码要进行扩展,比如汽车经销商新进了奥迪A6,也进行了销售。则只需进行如下扩展:
*/
//增加aodi车类
class AODIA6 implements Car{
public String getName(){
return "aodiA6";
}
public int getPrice(){
return 400000;
}
}
//在main方法里增加如下语句:
//carshop.sellCar(new CheryQQ());
//扩展后程序运行的结果如下:
/*
车型:BMW,价格1000000,所属类:class duotai.BMW
车型:CheryQQ,价格66666,所属类:class duotai.CheryQQ
车型:aodiA6,价格400000,所属类:class duotai.AODIA6
销售总收入:1466666
*/