1

好的,伙计们,我有一个任务,它有一个抽象类“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"));
    }
}

非营利组织

位置:空

总价:0.0

我不确定我是否在我的字符串中调用了错误的“价格”和位置,或者我在尝试从抽象 Order 类中实现这些方法时做错了什么

感谢您的任何帮助!

4

3 回答 3

2

您的超级构造函数没有设置位置

public Order(double price, String location){

}

所以这个构造函数

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

实际上并没有设置priceand location

将构造函数更改Order

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

未初始化的字段被赋予一个默认值。对于引用类型,该值为null. 对于数值类型,值为0。对于布尔类型,值为false。这就是你所看到的。

于 2013-09-11T18:44:16.570 回答
0

您只是缺少在抽象类中分配属性。

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

于 2013-09-11T18:46:56.217 回答
0

您尚未初始化实例变量locationprice.
因此Java 为这些提供了默认值
location是类型对象, 因此String默认值为是类型,因此默认值为。null
pricedouble0.0

在您的情况下,这些值将作为输出打印。所以尝试在Order类构造函数 中初始化它们

public Order(double price, String location){
    this.double = double;
    this.location = location;
}
于 2013-09-11T18:47:35.410 回答