设计抽象快递包裹类,使用动态绑定对calculateCost方法进行调用,并添加接口运输方式。 定义一个抽象快递包裹类 Package,并由此派生出普通包裹类和加急包裹类。 要求: (1)Package 类设计为抽象类,应包含寄件人和收件人姓名、地址和包裹重量属性; (2)普通包裹增加首重计费和超首重后部分的的每公斤计费单价属性,按首重+超重*每公斤计费单价计算总费用。 (3)加急包裹没 有首重限制,但有加急起价费用属性,按加急起价费+重量*10+加急公里数*0.02 计算总费用。 (4)为每个类添加 calculateCost 计算快递费用方法。编写测试程序,使用动态绑定对其进行调用。 (5)定义接口运输方式,接口中有抽象方法运输方式,普通包裹类和加急包裹类均需实现运输方式接口。 并写出该程序的测试类
时间: 2024-03-06 18:46:28 浏览: 24
好的,为您解答。
抽象快递包裹类 Package 的代码如下:
```java
public abstract class Package {
protected String senderName; // 寄件人姓名
protected String senderAddress; // 寄件人地址
protected String receiverName; // 收件人姓名
protected String receiverAddress; // 收件人地址
protected double weight; // 包裹重量
public Package(String senderName, String senderAddress, String receiverName, String receiverAddress, double weight) {
this.senderName = senderName;
this.senderAddress = senderAddress;
this.receiverName = receiverName;
this.receiverAddress = receiverAddress;
this.weight = weight;
}
public abstract double calculateCost(); // 抽象方法,计算快递费用
// 运输方式接口
public interface Transport {
public String getTransport(); // 获取运输方式
}
}
```
普通包裹类 OrdinaryPackage 的代码如下:
```java
public class OrdinaryPackage extends Package implements Package.Transport {
private double firstWeight; // 首重
private double additionalWeightPrice; // 超首重后的每公斤计费单价
private String transport; // 运输方式
public OrdinaryPackage(String senderName, String senderAddress, String receiverName, String receiverAddress,
double weight, double firstWeight, double additionalWeightPrice, String transport) {
super(senderName, senderAddress, receiverName, receiverAddress, weight);
this.firstWeight = firstWeight;
this.additionalWeightPrice = additionalWeightPrice;
this.transport = transport;
}
// 实现抽象方法,计算快递费用
public double calculateCost() {
if (weight <= firstWeight) {
return 10; // 首重费用为 10 元
} else {
return 10 + (weight - firstWeight) * additionalWeightPrice; // 超首重费用为 (重量-首重)*每公斤计费单价
}
}
// 实现接口方法,获取运输方式
public String getTransport() {
return transport;
}
}
```
加急包裹类 ExpressPackage 的代码如下:
```java
public class ExpressPackage extends Package implements Package.Transport {
private double expressPrice; // 加急起价费用
private double expressDistance; // 加急公里数
private String transport; // 运输方式
public ExpressPackage(String senderName, String senderAddress, String receiverName, String receiverAddress,
double weight, double expressPrice, double expressDistance, String transport) {
super(senderName, senderAddress, receiverName, receiverAddress, weight);
this.expressPrice = expressPrice;
this.expressDistance = expressDistance;
this.transport = transport;
}
// 实现抽象方法,计算快递费用
public double calculateCost() {
return expressPrice + weight * 10 + expressDistance * 0.02; // 加急费用为 加急起价费+重量*10+加急公里数*0.02 元
}
// 实现接口方法,获取运输方式
public String getTransport() {
return transport;
}
}
```
测试程序的代码如下:
```java
public class PackageTest {
public static void main(String[] args) {
Package ordinaryPackage = new OrdinaryPackage("Tom", "Shanghai", "Jerry", "Beijing", 5, 3, 2, "航空");
Package expressPackage = new ExpressPackage("Tom", "Shanghai", "Jerry", "Beijing", 5, 20, 50, "物流");
System.out.println("普通包裹的运输方式为:" + ((OrdinaryPackage) ordinaryPackage).getTransport());
System.out.println("普通包裹的快递费用为:" + ordinaryPackage.calculateCost() + " 元");
System.out.println("加急包裹的运输方式为:" + ((ExpressPackage) expressPackage).getTransport());
System.out.println("加急包裹的快递费用为:" + expressPackage.calculateCost() + " 元");
}
}
```
输出结果如下:
```
普通包裹的运输方式为:航空
普通包裹的快递费用为:16.0 元
加急包裹的运输方式为:物流
加急包裹的快递费用为:75.0 元
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)