首页 > 解决方案 > 自定义对象的实例在创建另一个 java 时被替换

问题描述

我有类似的代码,

public class ComplexSO {
    public static double real;
    public static double imaginary;

    public ComplexSO(double cReal, double cImaginary) {
        real = cReal;
        imaginary = cImaginary;
    }

    public static ComplexSO selfSquare() {
        return new ComplexSO(Math.pow(real, 2) - Math.pow(imaginary, 2), 
            2 * real * imaginary);
    }

    public static ComplexSO add(Complex other) {
        return new ComplexSO(real + other.real, imaginary + other.imaginary);
    }

    public static void main(String[] args) {
        ComplexSO c = new ComplexSO(1, 2);
        System.out.println("c.real = " + c.real + ", c.imaginary = " + c.imaginary);
        ComplexSO d = new ComplexSO(2, 3);
        System.out.println("c.real = " + c.real + ", c.imaginary = " + c.imaginary);
    }
}

当我运行它时,我得到了输出:

c.real = 1.0, c.imaginary = 2.0

c.real = 2.0, c.imaginary = 3.0

我对面向对象语言(C++ 和 python)并不陌生,但我对 java 很陌生,这对我来说毫无意义。请停下来。

标签: java

解决方案


在 Java 中,类的静态属性是全局的。每个类定义只有一个值。同样,静态方法在全局范围内运行,而不是在类实例上运行。real只需从、imaginaryselfSquare和中删除 static ,add您应该会看到正确的行为。您的main方法需要保持静态。


推荐阅读