Похоже, у вас возникло некоторое недопонимание того, что "методы экземпляра" позволяют вам делать.
Итак, вы вызываете calcProduct
дважды, но никакой другой экземпляр SalesOrder
не знает о значениях других, и это специально. Независимо от того, сколько раз вы запускаете этот метод, результат должен быть одинаковым.
Как говорится, это все, что вам нужно. Доставка, вероятно, не считается частью цены товара. И это должно быть добавлено, может быть, а не умножено (при условии, что все товары неограниченного количества отправляются сразу по фиксированной ставке)
public double calcProduct() {
return price * qty;
}
Правильный способ подсчета суммы - это сложить каждое, как вы уже делаете. Методы получения не должны иметь побочных эффектов и изменять результаты других экземпляров.
Обратите внимание, было бы намного проще, если бы вы использовали цикл над массивом
List<SalesOrder> orders = new ArrayList<>();
// add orders
double grandTotal = 0;
for (SalesOrder so : orders) grandTotal += (so calcProduct() + so.calcShipping());