【发布时间】:2018-06-02 16:20:38
【问题描述】:
我正在学习Java,发现this 关于 stackoverflow 的文章。
所以有两个类:
public class Image {
...
public Image clone() {
Image clone = new Image(getMagicNumber(), getHeight(), getWidth(), getMax());
for (int i = 0; i < getHeight(); i++){
for (int j = 0; j < getWidth(); j++){
clone.setPixel(getPixel(i, j), i, j);
}
}
return clone;
}
}
还有这个类:
public class Filter {
public Filter() {
}
public Image linearFilter(Image image, float[][] kernel) {
Image filtered = image.clone();
...
return filtered;
}
}
我习惯使用X instancename = new X(); 来创建一个实例,其中X 是类的名称。创建实例有不同的方法吗?例如在Filter 类中:Image filtered = image.clone(); 如何创建实例?为了创建一个实例,我认为“方程”的两边 X 必须相等。我的意思是:Image filtered = new Image();。我不明白Image filtered = image.clone(); 是如何创建一个新实例的。谁能解释一下?
【问题讨论】:
-
在 clone 方法中,你没看到 = new ... 吗?完全一样
-
如果您有
Image的源代码,您会看到Image#clone或其调用方法之一将调用new Image(...)。克隆图像只是隐藏了创建新图像所需的逻辑,同时保留了克隆语义。 -
无论你在哪里了解到双方需要“平等”都是错误的。比如stackoverflow.com/questions/17459553/…更准确地说,两边一定是相关的,左边是高阶对象
-
这是否意味着如果你有类 A 和 B 并且在 A 中有一个名为
clone的方法创建一个实例A name = new A();你可以通过执行Type newname = variable.clone()在 B 中创建一个实例?
标签: java methods constructor instance