Я новичок в Java, и я работаю над проектом, который работает с расчетом цен с/без скидок для сотрудников. Прочитав следующий код, кто-нибудь может объяснить мне, как мне нужно изменить свой код, чтобы получить правильный результат? Я объясню этот вопрос более подробно в конце сообщения.Java - переопределение родительского класса
Родитель класса (я не разрешено редактировать это):
public class GroceryBill {
private Employee clerk;
private List<Item> receipt;
private double total;
private double internalDiscount;
public GroceryBill(Employee clerk) {
this.clerk = clerk;
receipt = new ArrayList<Item>();
total = 0.0;
internalDiscount = 0.0;
}
public void add(Item i) {
receipt.add(i);
total += i.getPrice();
internalDiscount += i.getDiscount();
}
public double getTotal() {
return Math.rint(total * 100)/100.0;
}
public Employee getClerk() {
return clerk;
}
public void printReceipt() {
System.out.println(this);
}
private String valueToString(double value) {
value = Math.rint(value * 100)/100.0;
String result = "" + Math.abs(value);
if(result.indexOf(".") == result.length() - 2) {
result += "0";
}
result = "$" + result;
return result;
}
public String receiptToString() {
String build = "items:\n";
for(int i = 0; i < receipt.size(); i++) {
build += " " + receipt.get(i);
if(i != receipt.size() - 1) {
build += "\n";
}
}
return build;
}
public String toString() {
return receiptToString() + "\ntotal: " + valueToString(total);
}
public String discountToString() {
return receiptToString() + "\nsub-total: " + valueToString(total) + "\ndiscount: " + valueToString(internalDiscount) + "\ntotal: " + valueToString(total - internalDiscount);
}
public static class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public static class Item {
private String name;
private double price;
private double discount;
public Item(String name, double price, double discount) {
this.name = name;
this.price = price;
this.discount = discount;
}
public double getPrice() {
return price;
}
public double getDiscount() {
return discount;
}
private String valueToString(double value) {
String result = "" + Math.abs(value);
if(result.indexOf(".") == result.length() - 2) {
result += "0";
}
result = "$" + result;
return result;
}
public String toString() {
return name + " " + valueToString(price) + " (-" + valueToString(discount) + ")";
}
}
}
Вот мой код:
public class DiscountBill extends GroceryBill
{
private int myDiscountCount;
private double myDiscountAmount;
private double myPrice;
public DiscountBill(Employee clerk, boolean preferred)
{
super(clerk);
String name = "";
double price = 0;
double discount = 0;
GroceryBill.Item myBill = new GroceryBill.Item(name, price, discount);
myDiscountAmount = myBill.getDiscount();
if (myDiscountAmount > 0 && preferred)
{
myDiscountCount++;
}
}
public void add(Item myBill)
{
myPrice += myBill.getPrice();
myDiscountAmount = myBill.getDiscount();
if (myDiscountAmount > 0)
{
myDiscountCount++;
}
}
public double getTotal()
{
if (myDiscountCount > 0)
{
return myPrice - myDiscountAmount;
}
return myPrice;
}
public int getDiscountCount()
{
return myDiscountCount;
}
public double getDiscountAmount()
{
return myDiscountAmount;
}
public double getDiscountPercent()
{
return ((myPrice - myDiscountAmount)/myPrice * 100);
}
}
Наконец, here является ожидаемым результатом следуют моим конкретный вопрос:
Результаты, которые я получаю для своих методов, на один шаг впереди, где они должны быть. То есть мой getTotal, например, должен начинаться с 1.35 (первое значение, вводимое используемым мной веб-сайтом, которое проверяет мой дочерний класс, который я написал), а затем после очередного шага его следует уменьшить до 1.1 (веб-сайт использует скидку сотрудника, используя логическое значение, предпочитаемое конструктором), но моя программа выводит 1.1, потому что мой дочерний класс переопределяет метод getTotal() родительского класса и никогда не начинается с общего количества, которое должно (1.35). В основном мне нужно знать, как получить эти исходные значения из моего родительского класса, а THEN использовать методы переопределения для получения значений после их изменения. Если вы хотите посмотреть, как работает этот сайт, here - это ссылка на вопрос, над которым я работаю.
P.S. Пожалуйста, дайте мне знать, если мне нужно предоставить больше/меньше информации и способы, чтобы я мог очистить этот пост или упростить его понимание. Если бы мой вопрос был слишком широким, спросите меня, что вы не понимаете, и я постараюсь изо всех сил сказать вам! Спасибо!
'myPrice' в' DiscountBill' и 'total' в' GroceryBill' такие же? – Karthik
@karthik myPrice в DiscountBill изменяется для размещения скидок для сотрудников, тогда как общая сумма в GroceryBill не зависит от скидок. Мне нужно использовать общее количество для первого вывода, а затем myPrice для остальных. Моя проблема заключается в том, что моя программа использует myPrice все время и полностью переопределяет add() и getTotal() из GroceryBill. – Trafton
Я не уверен. Если я полностью понимаю ваш вопрос, я добавил ответ. Просто проверьте и дайте мне знать, что вы хотите. – Karthik