我正在做下面的家庭作业(我还是Java的新手...),在弄清楚编写LuxuryCarRental的正确方法时遇到了一些问题。我不确定我的工作是否CarRental是对的。我还没有使用UseCarRental。
创建一个名为CarRental的类,其中包含以下字段:renterName,zipCode,carSize,rentalFee,numDaysRented和totalRentalFee。
该类包含一个构造器,该构造器需要除总费用以外的所有租赁数据,总费用基于汽车的大小进行计算:经济型每天29.99美元,中型每天38.99美元,全尺寸每天43.50美元。该类还包括显示所有租赁数据的display()方法。
创建一个名为LuxuryCarRental的子类。此类将租金定为每天$ 79.99。
编写一个名为UseCarRental的应用程序,提示用户输入出租人的姓名,邮政编码,要出租的汽车的大小以及他们要出租的天数。
您的应用程序应显示总租金。
确保您的应用程序同时测试CarRental和LuxuryCarRental。
CarRental:https://pastebin.com/fq1wJF1s
LuxuryCarRental:https://pastebin.com/xBAK6NTy
package usecarrental;
public class CarRental
{
private String renterName = "";
private int rentalZipCode = 00000;
private String rentalCarSize = "";
private double rentalFeeDaily;
private int numDaysRented = 0;
private double totalRentalFee;
public CarRental(String name, int zipcode, int days, String carsize)
{
renterName = name;
rentalZipCode = zipcode;
rentalCarSize = carsize;
numDaysRented = days;
}
public void setrenterName(String name)
{
renterName = name;
}
public void setrentalZipCode(int zipcode)
{
rentalZipCode = zipcode;
}
public void setrentalCarSize(String carsize)
{
rentalCarSize = carsize;
}
public void setnumDaysRented(int days)
{
numDaysRented = days;
}
public String getrenterName()
{
return renterName;
}
public int getrentalZipCode()
{
return rentalZipCode;
}
public String getrentalCarSize()
{
return rentalCarSize;
}
public int getnumDaysRented()
{
return numDaysRented;
}
public double gettotalRentalFee()
{
return numDaysRented * rentalFeeDaily;
}
public double getrentalFeeDaily(String rentalCarSize)
{
switch (rentalCarSize)
{
case "Economy":
rentalFeeDaily = 29.99;
break;
case "Midsize":
rentalFeeDaily = 38.99;
break;
case "Fullsize":
rentalFeeDaily = 43.50;
break;
}
return rentalFeeDaily;
}
public void display()
{
System.out.println(
"Customer Details" +
"\nName = " + getrenterName() +
"\nZipcode = " + rentalZipCode +
"\nCar Size = " + getrentalCarSize() +
"\nRental Fee = " + rentalFeeDaily + "/daily" +
"\nRental Length = " + numDaysRented +
"\nTotal Fee + " + totalRentalFee
);
}
}
package usecarrental;
public class LuxuryCarRental extends CarRental
{
public LuxuryCarRental(String carsize, int days)
{
super(carsize, days);
}
public void computetotal1()
{
super.computetotal(days);
rentalFeeDaily = 79.99;
totalRentalFee = rentalFeeDaily;
}
}
最佳答案
属性和类常量:
首先,创建类属性时不必为类属性分配值。
为此使用构造函数。
其次,应该保护那些属性,因为LuxuryCarRental
类将在以后继承它们。
您不需要rentalFeeDaily
和totalRentalFee
属性。
属性变成
protected String renterName;
protected int rentalZipCode;
protected String rentalCarSize;
protected int numDaysRented;
您可以从
rentalFeeDaily
方法获得getRentalFeeDaily()
,并从totalRentalFee
方法获得totalRentalFee()
。然后将它们放入
display()
方法中:public void display()
{
System.out.println(
"Customer Details" +
"\nName = " + getrenterName() +
"\nZipcode = " + rentalZipCode +
"\nCar Size = " + getrentalCarSize() +
"\nRental Fee = " + getRentalFeeDaily + "/daily" +
"\nRental Length = " + numDaysRented +
"\nTotal Fee + " + totalRentalFee
);
}
最好将在类中使用的常数设为类常数。
public static final double ECONOMY_FEE = 29.99;
public static final double MIDSIZE_FEE = 38.99;
public static final double FULLSIZE_FEE = 43.50;
public static final double LUXURY_FEE = 79.99;
在您的
getRentalFeeDaily()
中:public double getRentalFeeDaily() {
double rentalFeeDaily = 0;
switch (rentalCarSize) {
case "Economy":
rentalFeeDaily = ECONOMY_FEE;
break;
case "Midsize":
rentalFeeDaily = MIDSIZE_FEE;
break;
case "Fullsize":
rentalFeeDaily = FULLSIZE_FEE;
break;
case "Luxury":
rentalFeeDaily = LUXURY_FEE;
}
return rentalFeeDaily;
}
为什么要给
getRentalFeeDaily()
方法一个String参数?您的rentalCarSize
是类中的属性,您可以将其用于访问此方法的对象实例。豪华租车类
LuxuryCarRental
是CarRental
的一种,唯一改变的是费用。您不需要
LuxuryCarRental
类的任何其他属性。public class LuxuryCarRental extends CarRental {
public LuxuryCarRental(String name, int zipcode, int days) {
super(name, zipcode, days, "Luxury");
}
}
创建
rentalCarSize
对象时,您也不必提供LuxuryCarRental
字符串,因为您将自己作为“豪华”提供给超类构造函数。因此,稍后,当您稍后创建
LuxuryCarRental
对象并想要计算其总费用价格时:构造函数将“豪华”作为
rentalCarSize
属性。该字符串将提供给超类中的方法
使用“ Luxury”
getRentalFeeDaily()
属性从rentalCarSize
获取豪华车费用后,该方法将返回总费用。UseCarRentalClass
public class UseCarRental {
public static void main(String[] args) {
CarRental cr = new CarRental("Honda", 1234, 10, "Economy");
LuxuryCarRental lcr = new LuxuryCarRental("Jaguar", 5678, 10);
System.out.println(cr.totalRentalFee());
System.out.println(lcr.totalRentalFee());
}
}
根据您的要求,这应该足够了。