Я работаю над личным проектом и в то же время экспериментирую с ним. У меня есть 3 класса, содержащиеся в 3 файлах: Calculate.java, Geometry.java и Test.java.
Geometry.java пока содержит только некоторые переменные, с которыми я хочу работать, методы get / set вместе с методом конструктора.
package project;
public class Geometry {
public static double length, width;
public Geometry() {
this.setLength(20);
this.setWidth(30);
}
public void setLength(double length){
this.length = length;
}
public void setWidth(double width){
this.width = width;
}
public double getLength(){
return this.length;
}
public double getWidth(){
return this.width;
}
}
Calculate.java имеет открытую переменную типа Geometry и метод для работы с переменными, которые я создал в Geometry.java.
package project;
import project.Geometry;
public class Calculate {
public static Geometry figure = new Geometry();
public static double area;
public void calcArea(){
this.area = figure.getLength() * figure.getWidth();
}
public double getArea(){
return this.area;
}
}
Наконец, в Test.java я создаю переменную c1 типа Calculate.
package project;
import project.Calculate;
public class Test{
public static void main(String[] args){
Calculate c1 = new Calculate;
Calculate c2 = new Calculate;
c1.figure.setLength(55);
c2.figure.setLength(75);
System.out.println("L1: "+c1.figure.getLength()+" L2: "+c2.figure.getLength());
}
}
Выход консоли: «L1: 75 L2: 75»
Моя интерпретация выходных данных заключается в том, что c1.figure и c2.figure записывают данные в одно и то же пространство в памяти и, таким образом, когда я вызывал c2.figure.setLength(75)
, он также изменял c1.figure.length
.
Когда я впервые написал этот код, я предполагал, что c1.figure
и c2.figure
будут поддерживать свои собственные отдельные значения, но они этого не делают. Есть ли способ добиться этого (пусть c1.figure
и c2.figure
сохраняют свои собственные значения без изменения других)?
PS: Когда я публикую здесь впервые, заранее прошу прощения, если испортил форматирование.