我希望你能帮助我理解这一点Copy Constructor
我花了2个多小时阅读网站上的阅读资料,我对此一无所知。
我知道复制构造函数用于复制类的对象。但我不明白复制consturctor的代码。
例如:
public class Rectangle
{
private double length = 10.0;
private double width = 10.0;
public Rectangle(double length, double width){
this.length = length;
this.width = width;
}
//this is the copy constructor what exactly the argument here? is it the object ref it self? please explain what happening here. and the use
public Rectangle(Rectangle ref){
this.length = ref.length;
this.width = ref.width;
}
这是我一直看到的。但我根本不懂代码!
ref
是否会在主程序中创建?
让我们说这是主程序
public class rectangleTest{
public static void main(String[] args){
//is this new_ref object going to be created here?
Rectangle new_ref = new Rectangle(10.0 , 10.0);
除非有人上小班,主要班级向我展示正在发生的事情,否则这件事不会100%清楚
谢谢。
答案 0 :(得分:3)
ref
不是类的名称;它是第二个构造函数的参数的名称。所以main
方法实际上看起来像这样:
Rectangle foo = new Rectangle(10.0 , 10.0);
// Create another Rectangle with the same width and height
Rectangle bar = new Rectangle(foo);
请注意,对象没有名称 - 变量可以。这里foo
变量的值成为第二个构造函数中ref
参数的值,当在上一行中调用该构造函数时。另请注意,foo
,bar
和ref
的值不是对象......它们是对象的引用。
答案 1 :(得分:2)
您可以像这样使用“复制构造函数”
Rectangle a = new Rectangle (3.0, 4.0);
Rectangle b = new Rectangle (a);
NOTA BENE:与C ++中的复制ctor是语言的一部分并且被隐含地调用不同,Java中的以下示例不会调用您的副本ctor,而只是分配引用。
Rectangle a = new Rectangle (3.0, 4.0);
Rectangle b = a;
在您的情况下,我更愿意实施克隆方法。
答案 2 :(得分:0)
名字无关紧要。这个名称只是指一个对象,所以当你把它传递给一个方法时,它只是使用了一个不同的名字。
答案 3 :(得分:0)
它更像是clone()
,它会复制您的对象,以便您有两个不同的实例,但它们是相同的。