用重写、多态相关知识写租车系统
1、车的父类代码
public abstract class FatherCar {
public FatherCar() {
}
public FatherCar(String chepaihao, String pinpai, double daymoney) {
this.chepaihao = chepaihao;
this.pinpai = pinpai;
this.daymoney = daymoney;
}
private String chepaihao;
private String pinpai;
private double daymoney;
// private int days;
public abstract double money(int x);
// public int getDays() {
// return days;
// }
//
// public void setDays(int days) {
// this.days = days;
// }
public String getChepaihao() {
return chepaihao;
}
public void setChepaihao(String chepaihao) {
this.chepaihao = chepaihao;
}
public String getPinpai() {
return pinpai;
}
public void setPinpai(String pinpai) {
this.pinpai = pinpai;
}
public double getDaymoney() {
return daymoney;
}
public void setDaymoney(double daymoney) {
this.daymoney = daymoney;
}
}
2、轿车子类代码
public class Car extends FatherCar{
public Car() {
}
public Car(String chepaihao, String pinpai, double daymoney, String zhonglei) {
super(chepaihao, pinpai, daymoney);
this.zhonglei = zhonglei;
}
private String zhonglei;
public String getZhonglei() {
return zhonglei;
}
public void setZhonglei(String zhonglei) {
this.zhonglei = zhonglei;
}
@Override
public double money(int x) {
if(x<15){
return getDaymoney()*1*x;
}else if(x>15 && x<90){
return getDaymoney()*0.9*x;
}else if(x>90 && x<150){
return getDaymoney()*0.8*x;
}else{
return getDaymoney()*0.7*x;
}
}
}
3、客车子类代码
public class Bus extends FatherCar{
public Bus() {
}
public Bus(String chepaihao, String pinpai, double daymoney, String setamount) {
super(chepaihao, pinpai, daymoney);
this.setamount = setamount;
}
private String setamount;
public String getSetamount() {
return setamount;
}
public void setSetamount(String setamount) {
this.setamount = setamount;
}
@Override
public double money(int x) {
if(x<7){
return getDaymoney()*1*x;
}else if(x>7 && x<30){
return getDaymoney()*0.9*x;
}else if(x>30 && x<90){
return getDaymoney()*0.8*x;
}else{
return getDaymoney()*0.7*x;
}
}
}
4、中间类
public class ShuRu {
FatherCar[] xinxi = new FatherCar[8];
public void init() {
xinxi[0] = new Car("陕A1212", "比亚迪", 100, "唐");
xinxi[1] = new Car("陕A2323", "奔驰", 200, "SL");
xinxi[2] = new Car("陕A3434", "比亚迪", 100, "宋");
xinxi[3] = new Car("陕A4545", "奔驰", 200, "CLK");
xinxi[4] = new Bus("陕A5656", "宇通", 80, "30");
xinxi[5] = new Bus("陕A6767", "海格", 90, "30");
xinxi[6] = new Bus("陕A7878", "宇通", 85, "40");
xinxi[7] = new Bus("陕A8989", "海格", 95, "40");
}
public FatherCar panduan(String pinpai,String zhonglei,String setamount) {
FatherCar b = null;
for (FatherCar a : xinxi) {
if(a instanceof Car){
Car car = (Car)a;
if (car.getPinpai().equals(pinpai) && car.getZhonglei().equals(zhonglei)) {
b = car;
break;
}
}else{
Bus bus = (Bus)a;
if(bus.getPinpai().equals(pinpai)&&bus.getSetamount().equals(setamount)){
b = bus;
break;
}
}
}
return b;
}
}
5、主函数
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
ShuRu s = new ShuRu();
s.init();
FatherCar f;
System.out.println("**********欢迎来到安全租车***********");
System.out.println("1.小轿车 2.客车");
System.out.println("请选择您想租聘的汽车类型");
Scanner input = new Scanner(System.in);
if(input.nextInt()==1){
System.out.println("请选择您想租聘的汽车品牌:1.奔驰 2.比亚迪");
if(input.nextInt() == 1){
System.out.println("请选择您想租聘的汽车种类:1.SL 2.CLK");
if(input.nextInt() == 1){
f = s.panduan("奔驰","SL",null);
}else{
f = s.panduan("奔驰","CLK",null);
}
}else{
System.out.println("请选择您想租聘的汽车种类:1.唐 2.宋");
if(input.nextInt() == 1){
f = s.panduan("比亚迪","唐",null);
}else{
f = s.panduan("奔驰","宋",null);
}
}
}else{
System.out.println("请选择您想租聘的汽车品牌:1.宇通 2.海格");
if(input.nextInt() == 1){
System.out.println("请选择您想租聘的汽车种类:1.30 2.40");
if(input.nextInt() == 1){
f = s.panduan("宇通",null,"30");
}else{
f = s.panduan("宇通",null,"40");
}
}else{
System.out.println("请选择您想租聘的汽车种类:1.30 2.40");
if(input.nextInt() == 1){
f = s.panduan("海格",null,"30");
}else{
f = s.panduan("海格",null,"40");
}
}
}
System.out.println("您的车牌号是:"+f.getChepaihao());
System.out.println("请输入您要租聘的天数:");
System.out.println("您的租金是:"+f.money(input.nextInt()));
}
}
整体优化后的主函数代码:
ShuRu s = new ShuRu();
s.init();
switch (input.nextInt()) {
case 1:
System.out.print("请选择你要租赁的汽车品牌:1、别克 2、宝马");
int choose2 = input.nextInt();
if (choose2 == 1) {
brand = "别克";
System.out.print("请选择你要租赁的汽车类型:1、林荫大道 2、GL8");
type = (input.nextInt() == 1) ? "林荫大道" : "GL8";
} else if (choose2 == 2) {
brand = "宝马";
System.out.print("请选择你要租赁的汽车类型:1、X6 2、550i");
type = (input.nextInt() == 1) ? "X6" : "550i";
}
FatherCar f = s.panduan(brand, type, 0);
break;
case 2:
System.out.print("请选择你要租赁的汽车品牌:1、金龙 2、金杯");
brand = (input.nextInt() == 1) ? "金龙" : "金杯";
System.out.print("请选择你要租赁的汽车座位数:1、16座 2、34座");
seat = (input.nextInt() == 1) ? 16 : 34;
FatherCar f = s.panduan(brand, "", seat);
break;
}
//计算租金 天数
System.out.print("请输入您要租赁的天数:");
int days = input.nextInt();
// 调用子类 计算租金方法 (重写 父类的方法)
float sum = f.money(days);
System.out.println("原价:" + (f.getdaymoney() * days) + ",折后价格:" + sum);