从租车系统看OOP设计:如何用Java实现客车、货车和皮卡车的类继承关系
租车系统的业务场景看似简单,却蕴含着面向对象设计的精髓。当我们需要处理客车、货车和皮卡车这三种不同类型的车辆时,如何设计类结构才能既满足当前需求,又保持足够的扩展性?这不仅是初学者面临的挑战,也是资深开发者不断思考的设计哲学。
1. 理解业务需求与领域模型
在开始编码之前,我们需要深入理解租车系统的核心业务需求:
- 车辆类型:系统需要管理三种主要车型——客车、货车和皮卡车
- 核心属性:所有车辆都有名称和租金这两个基本属性
- 差异化能力:
- 客车:只能载人,需要记录最大载客量
- 货车:只能载货,需要记录最大载重量
- 皮卡车:客货两用,需要同时记录载客量和载重量
这个业务模型看似简单,但已经包含了继承和多态的应用场景。我们需要设计一个类结构,既能表达共性,又能处理差异。
2. 基础类结构设计
2.1 基类Vehicle的设计
所有车辆的共性可以抽象到一个基类中:
public abstract class Vehicle {
protected String name;
protected int dailyRent;
public Vehicle(String name, int dailyRent) {
this.name = name;
this.dailyRent = dailyRent;
}
public abstract double calculateRent(int days);
public String getName() {
return name;
}
public int getDailyRent() {
return dailyRent;
}
}
这个基类定义了所有车辆共有的属性和行为:
name:车辆名称dailyRent:每日租金calculateRent:计算租金的抽象方法(多态的体现)
2.2 派生类的实现
基于这个基类,我们可以创建具体的车辆类型:
客车类:
public class PassengerVehicle extends Vehicle {
private int maxPassengers;
public PassengerVehicle(String name, int dailyRent, int maxPassengers) {
super(name, dailyRent);
this.maxPassengers = maxPassengers;
}
@Override
public double calculateRent(int days) {
return days * dailyRent;
}
public int getMaxPassengers() {
return maxPassengers;
}
}
货车类:
public class Ca


626

被折叠的 条评论
为什么被折叠?



