Java 复制构造函数冲突?

Java 复制构造函数冲突?,java,Java,我有一段更大的代码 public PizzaOrder(PizzaOrder PizzaOrderCopy) { this.pizza1 = PizzaOrderCopy.pizza1; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub

我有一段更大的代码

    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(); 
冒出

the constructor PizzaOrder is undefined
因为它现在需要一个参数


我怎么看它(很可能是错的)是
PizzaOrder副本
是一份副本,
PizzaOrder
是一份副本。所以我想知道为什么它们会相互影响?我能想到的唯一解释是它们以某种方式连接起来。

您需要添加构造函数

public PizzaOrder()
{

}
然后像这样使用构造函数

PizzaOrder anotherPizzaOrder = new PizzaOrder();
...
PizzaOrder pizzorder = new PizzaOrder(anotherPizzaOrder);

如果没有定义任何构造函数,javac编译器只提供隐式零parm构造函数。因此,您需要按照Alex所述定义zero-parm构造函数。

当类中没有定义构造函数时,Java编译器会提供一个默认的无参数构造函数。由于您在类中定义了复制构造函数,所以编译器不会添加no-param构造函数。因此,当您这样做时:

PizzaOrdre pizzaorder = new PizzaOrder(); 
您正在调用未定义的无参数构造函数,这导致了错误。因此,只需在PizzaOrdre类中添加一个无参数构造函数,如下所示:

public PizzaOrder(){}

您甚至没有使用复制构造函数。您使用的是默认构造函数,在本例中,它不存在,因为您定义了自己的构造函数。创建一个没有参数的构造函数,这应该可以工作。可能需要显式说明问题。原因是默认的构造函数只在不存在用户定义的构造函数时生成。好的,谢谢,这是我第一次需要使用多个构造函数:3