2013-09-11 1 views
1

Ok ребята У меня есть задание, которое имеет абстрактный класс «Order» и три других классов, которые расширяют его «OverseasOrder», «RegularOrder» и «» NonProfitOrderРасширение и печать из абстрактного класса

Здесь мой абстрактный класс:

public abstract class Order { 
    protected String location; 
    protected double price; 

    public Order(double price, String location){ 

    } 

    public abstract double calculateBill(); 

    public String getLocation() { 
    return location; 
    } 

    public double getPrice() { 
    return price; 
    } 

    public abstract String printOrder(String format); 

} 

и вот мой «NonProfitOrder»:

public class NonProfitOrder extends Order { 

public NonProfitOrder(double price, String location) { 
    super(price, location); 
} 

public double calculateBill() { 
    double bill; 
    bill = price; 
    return bill; 
} 

public String printOrder(String format){ 
    String Long = "Non-Profit Order" + "\nLocation: " + getLocation() + "\nTotal Price: " + getPrice(); 
    return Long; 
} 

} 

Я беру его шаг за шагом, чтобы убедиться, что все работает, так что это единственные классы, которые я написалтак далеко. Проблема, которую я имею будет, когда я испытываю что-то вроде

public class OrderTester { 

public static void main(String[] args) { 
    Order o; 
    o = new NonProfitOrder(2000.0, "NY"); 
    System.out.println(o.printOrder("Long")); 
    } 
} 

Non-Profit Order

Расположение: Null

Общая стоимость: 0,0

Я не уверен, если я звоню «цена» и «местоположение» неверны в моей строке, или если я что-то делаю неправильно, пытаясь реализовать эти методы из абстрактного класса заказа

Спасибо за любые и все помогают!

ответ

2

Ваш супер конструктор не устанавливает расположение

public Order(double price, String location){ 

} 

поэтому этот конструктор

public NonProfitOrder(double price, String location) { 
    super(price, location); // calls super class' constructor 
} 

фактически не установить price и location.

Измените конструктор Order к

public Order(double price, String location){ 
    this.double = double; 
    this.location = location; 
} 

Un-инициализируются поля приведены значения по умолчанию. Для ссылочных типов это значение равно null. Для числовых типов значение равно 0. Для булевых типов значение равно false. Это то, что вы видели.

0

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

public Order(double price, String location){ 
    this.price = price; 
    this.location = location; 
} 

0

Вы не инициализируются переменные экземпляра location и price.
So Java provides default values for those.
Здесь location имеет тип String объекта так, значение по умолчанию null
price является double типа так значение по умолчанию 0.0.

Эти значения печатаются как выходные данные в вашем корпусе. Итак, попробуйте инициализировать их в Order класс конструктор

public Order(double price, String location){ 
    this.double = double; 
    this.location = location; 
}