我正在做下面的家庭作业(我还是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类将在以后继承它们。

您不需要rentalFeeDailytotalRentalFee属性。

属性变成

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是类中的属性,您可以将其用于访问此方法的对象实例。

豪华租车类

LuxuryCarRentalCarRental的一种,唯一改变的是费用。

您不需要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());

    }
}


根据您的要求,这应该足够了。

08-04 23:14