Наследование Java LuxuryCarRental - PullRequest
0 голосов
/ 21 марта 2019

Я работаю над своим домашним заданием ниже (я все еще новичок в 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;
            }
}

1 Ответ

2 голосов
/ 21 марта 2019

Атрибуты и константы класса:

Прежде всего , вам не нужно присваивать значения атрибутам класса при их создании.Для этого используйте конструктор.

Во-вторых, , эти атрибуты должны быть защищены, поскольку класс 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() метод строкового параметра?ваш rentalCarSize является атрибутом в вашем классе, и вы можете использовать его для экземпляра объекта, обращающегося к этому методу.

LuxuryCarRental class

A LuxuryCarRental CarRental с единственным изменением - это плата.

Вам не нужны никакие дополнительные атрибуты для класса LuxuryCarRental.

public class LuxuryCarRental extends CarRental {

    public LuxuryCarRental(String name, int zipcode, int days) {
        super(name, zipcode, days, "Luxury");
    }

}

Вам также не нужно указывать rentalCarSize String при создании объекта LuxuryCarRental, так как вы будете указывать его как «Luxury» для конструктора суперкласса.

Так что позже, когда вы создадитеобъект LuxuryCarRental позже, и вы хотите рассчитать его общую цену:

  1. Конструктор выдаст «Luxury» как атрибут rentalCarSize.
  2. Эта строка будет заданак методу в суперклассе
  3. Метод вернет общую сумму после получения платы за роскошный автомобиль от getRentalFeeDaily() с использованием атрибута "Luxury" 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());

    }
}

Этого должно быть достаточно, как вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...