11.1.2 Java中如何实现多态
A
A
White
Night
阅读: 147
实现多态的三个步骤:
(1)编写父类/接口
(2)编写子类/实现类,子类重写/实现父类中的方法
(3)运行时,父类创建子类对象
等号的左边是父类类型,称为编译时类型,等号右边是不同的子类,称为运行时类型。
实现多态的前提条件是:继承,没有继承,无从谈多态。
**课堂案例:使用多态实现租赁车辆的租金计算**
小轿车Car与大巴车Bus都属于机动车MotoVehicle,都具备品牌和车牌的属性,都具备计算租金的功能,但是计算租金的方式不同,所以可以将计算租金的方法定义为抽象方法,类的继承关系,如图11-3所示。示例代码参见示例11-2~示例11-5,运行效果如图11-4所示。
![](/public/editoruploads/20200407/511f193ca10f1b1cd55ab91fd5061868.png)
**【示例11-2】编写父类MotoVehicle类**
```java
package cn.sxt.moto;
public abstract class MotoVehicle {//父类
//编写私有属性
private String no;
private String brand;
……省略公有getter与setter方法
//编写构造方法
public MotoVehicle(String no, String brand) {
super();
this.no = no;
this.brand = brand;
}
public MotoVehicle() {
super();
}
//编写计算租金的方法
public abstract int calRent(int days);
}
```
****【示例11-3】编写子类Car类****
```java
package cn.sxt.moto;
public class Car extends MotoVehicle {
//编写属性
private String type;//型号
……省略getter与setter方法
//编写构造方法
public Car() {
super();
}
public Car(String no, String brand, String type) {
super(no, brand);
this.type = type;
}
@Override
public int calRent(int days) {
return 300*days;//租金每天300
}
}
```
**【示例11-4】编写子类Bus类**
```java
package cn.sxt.moto;
public class Bus extends MotoVehicle {
//编写属性
private int seatCount;//座位数
……省略getter与setter方法
//构造方法
public Bus() {
super();
}
public Bus(String no, String brand, int seatCount) {
super(no, brand);
this.seatCount = seatCount;
}
@Override
public int calRent(int days) {
if (seatCount<=16) {
return 800*days;
}else{
return 1500*days;
}
}
}
```
**【示例11-5】编写测试类**
```java
package cn.sxt.moto;
public class Test {
public static void main(String[] args) {
//创建父类类型的数组
MotoVehicle [] mv=new MotoVehicle[5];
//创建5个不同的子类对象
MotoVehicle m1=new Car("京p0430fd","宝马","X50");
MotoVehicle m2=new Car("冀A434fdd", "奥迪", "A6");
MotoVehicle m3=new Car("沪B344sad", "别克", "林荫大道");
MotoVehicle m4=new Bus("吉Dewqda2", "福田", 18);
MotoVehicle m5=new Bus("陕Dfaesd3", "东风", 14);
//将车辆对象存放到数组中
mv[0]=m1;
mv[1]=m2;
mv[2]=m3;
mv[3]=m4;
mv[4]=m5;
//遍历数组,调用计算租金的方法
int rentMoney=0;
int days=5;//租赁的天数为5天
for (MotoVehicle motoVehicle : mv) {
rentMoney+=motoVehicle.calRent(days);
}
System.out.println("租金一共为:"+rentMoney);
}
}
```
![](/public/editoruploads/20200407/ffd98aa5c08312c1cd870ce3c49d1a18.png)
读后有收获可以加微信群讨论,读后想观看视频可以直接扫描观看:
我来说两句
0条评论
热门评论