ToString не выводится, простая программа класса иерархии - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть два интерфейса и два класса, класс Order является родительским для CoffeeBagOrder, нет ошибки компилятора, которую он просто не отображает, и я не вижу, почему нет

Класс заказа:

public abstract class Order implements OrderInterface {
    //variables
    final static double SALES_TAX = 0.1; //not initialised by constructor
    int unitWeight, numberOfUnits;

    public Order() {
        unitWeight=0;
        numberOfUnits=0;
    }

    public Order(int unitWeight, int numberOfUnits) {
        unitWeight=unitWeight;
        numberOfUnits=numberOfUnits;
    }


    public void numberOfItems(int number) {
        numberOfUnits=number;

    }

    public void unitWeight(int weight) {
        unitWeight=weight;

    }



}

Класс CoffeeBagOrder

public class CoffeeBagOrder extends Order implements Sales {

    final static double PRICE_PER_KG = 5.55;

    double salesBeforeTax;
    double tax;
    double totalSales;

    public CoffeeBagOrder() {

    }

    public CoffeeBagOrder(int unitWeight, int numberOfUnits) {
        super(unitWeight,numberOfUnits);


    }

    public double calculateSalesBeforeTax() {
        salesBeforeTax= unitWeight*numberOfUnits*5.50;
        return salesBeforeTax;
    }


    public double calculateSalesTax() {
        tax=salesBeforeTax*0.10;
        return tax;
        }



        public double calculateTotalSales() {
        totalSales=salesBeforeTax+tax;
        return totalSales;

    }
    //Override
    public String toString() {
        return "Price before tax: "+calculateSalesBeforeTax()+"\nTax: "+calculateSalesTax()+"\nTotal price: "+calculateTotalSales();
    }


}

main

import java.util.Scanner;
public class Tester {
    public static void main (String[] args) {



        Scanner sc= new Scanner(System.in);
        System.out.print("Enter number of bags sold: ");
        int unitWeight=sc.nextInt();

        System.out.print("Enter weight of bags in kilograms: ");
        int numberOfUnits=sc.nextInt();

        CoffeeBagOrder customer=new CoffeeBagOrder(unitWeight,numberOfUnits);

        customer.toString();


    }

}

Я пропустил интерфейсы, но за ними следуют соответственно, заранее спасибо, также я не уверен, правильно ли я написалконструкторы как они одинаковые?

1 Ответ

0 голосов
/ 19 февраля 2019

Измените конструктор класса Order, как показано ниже (проверьте это.):

public Order(int unitWeight, int numberOfUnits) {
        this.unitWeight=unitWeight;
        this.numberOfUnits=numberOfUnits;
    }

Вы не обновляли поле класса в конструкторе!Он назначал параметр самому себе.

И измените toString в CoffeeBagOrder, как показано ниже (проверьте аннотацию):

@Override
    public String toString() {
        return "Price before tax: "+calculateSalesBeforeTax()+"\nTax: "+calculateSalesTax()+"\nTotal price: "+calculateTotalSales();
    }

Всегда используйте аннотацию @Override, когда вы намереваетесь переопределить, чтобы получить его эффект, что является лучшей практикой, а не вызывать toString () явно.

И печатать используя

System.out.println(customer);
...