我有这个更大代码的片段;
public PizzaOrder(PizzaOrder PizzaOrderCopy)
{
this.pizza1 = PizzaOrderCopy.pizza1;
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
PizzaOrder pizzorder = new PizzaOrder();
pizzorder.setNumPizza(1);
pizzorder.setPizza1("small",1,1,1);
pizzorder.setPizza2("medium",3,6,4);
pizzorder.setPizza3("large",2,4,4);
pizzorder.getpizza1info();
pizzorder.getpizza2info();
pizzorder.getpizza3info();
pizzorder.calcTotal();
}
// TODO Auto-generated method stub
}
我正在复制构造函数PizzaOrderCopy
并制作PizzaOrders
对象Pizza1的副本。当我构建我的代码时
PizzaOrdre pizzaorder = new PizzaOrder();
spazzes out
the constructor PizzaOrder is undefined
因为它现在想要一个参数。
我如何看待(最有可能是错误的)PizzaOrder Copy
是一份副本而Pizzaorder
是一份副本。所以我想知道为什么他们互相影响?我能想到的唯一解释是他们以某种方式加入。
答案 0 :(得分:5)
当类中没有定义构造函数时,Java编译器提供默认的无参数构造函数。由于您已在类中定义了复制构造函数,因此编译器不会添加no-param构造函数。因此当你这样做时:
PizzaOrdre pizzaorder = new PizzaOrder();
您正在调用未定义的无参数构造函数,这会导致错误。因此,只需在您的PizzaOrdre类中添加一个no-param构造函数作为metnioned:
public PizzaOrder(){}
答案 1 :(得分:2)
您需要添加构造函数
public PizzaOrder()
{
}
并使用您的构造函数,如
PizzaOrder anotherPizzaOrder = new PizzaOrder();
...
PizzaOrder pizzorder = new PizzaOrder(anotherPizzaOrder);
答案 2 :(得分:1)
如果没有定义任何构造函数,javac编译器只提供隐式的零parm构造函数。因此,您需要按照Alex所述的方式定义零parm构造函数。