Атрибуты и константы класса:
Прежде всего , вам не нужно присваивать значения атрибутам класса при их создании.Для этого используйте конструктор.
Во-вторых, , эти атрибуты должны быть защищены, поскольку класс 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
позже, и вы хотите рассчитать его общую цену:
- Конструктор выдаст «Luxury» как атрибут
rentalCarSize
. - Эта строка будет заданак методу в суперклассе
- Метод вернет общую сумму после получения платы за роскошный автомобиль от
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());
}
}
Этого должно быть достаточно, как вы просили.