java carshop_java-多态

多态

•相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。

即:多态是同一个行为具有多个不同表现形式或形态的能力。

多态存在的三个必要条件

继承

重写

父类引用指向子类对象

556a903ea7ed8e589fec24484d94f6a9.png

理论举例:

比如有一个父类superClass,它有2个子类subClass1,subClass2。superClass有一个方法

func(),两个子类都重写了这个方法。那么我们可以定义一个superClass的引用obj,让它指向一个子类的对象,比如superClass obj = new subClass1();那么我们调用obj.func()方法时候,会进行动态绑定,也就是obj它的实际类型的func()方法,即subClass1的func()方法。同样你写superClass obj = new subClass2();obj.func()其实调用的是subClass2的func()方法。这种由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态。多态对程序的扩展具有非常大的作用,比如你要再有一个subClass3,你需要改动的东西会少很多,要是使用了配置文件那就可以不动源代码了。

代码实例:

定义Car接口

packagecom.it.test;public interfaceCar {//接口中的方法为抽象方法

abstract String getName(); //过去汽车名称

public int getPrice(); //过去汽车售价

}

BMW继承并重写Car

packagecom.it.test;//宝马

public class BMW implementsCar {

@OverridepublicString getName() {return "BMW";

}

@Overridepublic intgetPrice() {return 300000;

}

}

BENZ继承并重写Car

packagecom.it.test;//奔驰

public class BENZ implementsCar {

@OverridepublicString getName() {return "BENZ";

}

@Overridepublic intgetPrice() {return 400000;

}

}

Carshop类

packagecom.it.test;//汽车出售店

public classCarshop {//售车收入

private int money = 0;//卖出一台车

public voidsellCar(Car car){

System.out.println("车型:"+car.getName()+"单价:" +car.getPrice());//增加卖出车售价的收入

money +=car.getPrice();

}//售车总收入

public intgetMoney(){returnmoney;

}public static voidmain(String[] args) {

Carshop carshop= newCarshop();//卖出一辆宝马

Car car = newBMW();//卖出一脸奔驰

Car car1 = newBENZ();

carshop.sellCar(car);

carshop.sellCar(car1);

System.out.println("总收入:"+carshop.getMoney());

}

}

•多态给我们带来的好处是消除了类之间的耦合关系,使程序更容易扩展。比如在上例中,新增加一种类型汽车的销售,只需要让新定义的类继承 Car 类并实现它的所有方法,而无需对原有代码做任何修改,CarShop 类的 sellCar(Car car) 方法就可以处理新的车型了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Java代码实现: Car.java ``` public interface Car { public String getName(); public int getPrice(); } ``` BMW.java ``` public class BMW implements Car { public String getName() { return "BMW"; } public int getPrice() { return 300000; } } ``` CherryQQ.java ``` public class CherryQQ implements Car { public String getName() { return "CherryQQ"; } public int getPrice() { return 20000; } } ``` Santana.java ``` public class Santana implements Car { public String getName() { return "Santana"; } public int getPrice() { return 280000; } } ``` CarShop.java ``` public class CarShop { private int count; private int total; public void sellCar(Car car) { count++; total += car.getPrice(); System.out.println("car model:" + car.getName() + " price:" + car.getPrice()); } public int getCount() { return count; } public int getTotal() { return total; } } ``` Test.java ``` public class Test { public static void main(String[] args) { CarShop shop = new CarShop(); Car car1 = new BMW(); Car car2 = new CherryQQ(); Car car3 = new Santana(); shop.sellCar(car1); System.out.println("total income:" + shop.getTotal() + " count of sold:" + shop.getCount()); shop.sellCar(car2); System.out.println("total income:" + shop.getTotal() + " count of sold:" + shop.getCount()); shop.sellCar(car3); System.out.println("total income:" + shop.getTotal() + " count of sold:" + shop.getCount()); } } ``` 输出结果: ``` car model:BMW price:300000 total income:300000 count of sold:1 car model:CherryQQ price:20000 total income:320000 count of sold:2 car model:Santana price:280000 total income:600000 count of sold:3 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值