假设我有一个Dog
类,并且创建了两个Dog
实例,如下所示:
Dog dog1 = new Dog();
Dog dog2 = dog1;
如果我用
dog1.shower();
dog2
也会执行通话吗?如果是这样,如何防止dog2
调用相同的方法? 最佳答案
通过编写Dog dog2 = dog1;
,您可以声明引用dog2
,该引用将指向与dog1
相同的对象。
因此,调用dog1.shower();
或dog2.shower();
将导致相同的行为(在同一shower()
对象上调用Dog
方法)。
如果你写
Dog dog2 = new Dog();
您使
dog2
引用另一个新创建的Dog
对象。编辑
如果需要
dog2
引用不同的Dog
并获得dog1
的所有品质,则可以选择:按照chrylis建议创建一个copy constructor。
完成此操作后,您可以编写:
// dog2 refers to new copy of `Dog`, identical to original dog1
Dog dog2 = new Dog(dog1);
您班级
Dog
中的Override Object.clone()。在这种情况下,您将拥有:// dog2 refers to new copy of `Dog`, identical to original dog1
Dog dog2 = dog1.clone();
我认为您也可以参考这些选项的简单示例来参考Edgar的答案。