具有相同名称但不同签名的构造函数不会运行

时间:2014-10-28 12:52:35

标签: java methods constructor

我有这两个构造函数:

public StockItem(Long id, String name, String desc, double price) {
    this.id = id;
    this.name = name;
    this.description = desc;
    this.price = price;
}

public StockItem(Long id, String name, String desc, double price, int quantity) {
    this.id = id;
    this.name = name;
    this.description = desc;
    this.price = price;
    this.quantity = quantity;
}

在另一个班级中这样做:

StockItem item2 = new StockItem();
item2.setId(Long.parseLong(idField.getText()));
item2.setName(nameField.getText());
item2.setDescription(descField.getText());
item2.setPrice((double) Math.round(Double.parseDouble(priceField.getText()) * 10) / 10);
item2.setQuantity(Integer.parseInt(quantityField.getText()));
System.out.println(item2);

输出结果为:

id, name, desc, price

为什么不把数量带入item2 ??? 如果我这样做:

System.out.println(Integer.parseInt(quantityField.getText()));

它能给我数量。

有人能告诉我为什么它没有意识到使用第二个StockItem构造函数。删除第一个StockItem构造函数后,即使尝试了它。

3 个答案:

答案 0 :(得分:4)

对于一个你没有使用你在问题中显示的构造函数。您正在创建一个新对象,然后使用setter设置字段。您可能想要查看类的setQuantity方法,看看它在做什么。你不在这里使用任何一个构造函数。

尝试这样的方法来初始化你的对象:

StockItem item2 = new StockItem(Long.parseLong(idField.getText()), nameField.getText(), descField.getText(), (double) Math.round(Double.parseDouble(priceField.getText()) * 10) / 10, Integer.parseInt(quantityField.getText()));

它实际上会使用你的构造函数。

另请查看StockItem类的toString()方法。它可能不是打印数量。您需要在toString()方法输出中添加数量字段。

答案 1 :(得分:1)

toString()的{​​{1}}方法中,您还必须包含StockItem。例如:

quantity

这样,当您执行public String toString() { return id + ", " + name + ", " + description + ", " + price + ", " + quantity; } 时,System.out.println(item2);将会使用结果中包含的toString()进行调用。

答案 2 :(得分:0)

您使用它的构造函数不在您显示的构造函数中。你确定你能够在不创建没有参数的新构造函数的情况下运行它吗?如果我没错,你应该像这样使用它们。如果您想使用第一个构造函数:

Long id = Long.parseLong(idField.getText());
String name = nameField.getText();
String desc = descField.getText();
double price = (double) Math.round(Double.parseDouble(priceField.getText());

StockItem stockItemUsingFirstConstructor = new StockItem(id, name, desc, price);

如果你想使用第二个构造函数:

Long id = Long.parseLong(idField.getText());
String name = nameField.getText();
String desc = descField.getText();
double price = (double) Math.round(Double.parseDouble(priceField.getText());
int quantity = Integer.parseInt(quantityField.getText());

StockItem stockItemUsingSecondConstructor = new StockItem(id, name, desc, price, quantity);

这称为重载。 :)

P.S:使用变量使其更清晰。 :)