假设我有一个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的答案。

07-28 13:21