Java 用一个类的实例字段影响另一个类的实例字段

Java 用一个类的实例字段影响另一个类的实例字段,java,Java,我想事先澄清,我只从业余爱好者的角度对编程感兴趣,没有编程方面的教育,也没有任何专业经验 我试图找出如何影响一个类的实例字段和另一个类的实例字段。下面是我想弄明白的一个例子: //Main Class class Main { public static void main(String[] args) { Class1 instance1 = new Class1(1); Class2 instance2 = new Class2(1);

我想事先澄清,我只从业余爱好者的角度对编程感兴趣,没有编程方面的教育,也没有任何专业经验

我试图找出如何影响一个类的实例字段和另一个类的实例字段。下面是我想弄明白的一个例子:

//Main Class
class Main
{
    public static void main(String[] args)
    {

        Class1 instance1 = new Class1(1);
        Class2 instance2 = new Class2(1);

    }

    public void method1()
    {
        // code to add the class1 instance field value class1Num1 to Class2 instance field value class2Num1
        // at least cobine the two values in one variable that is usable in Main
    }
}

//Class1
class Class1
{
    int class1Num1;

    public Class1(int num1)
    {
        class1Num1 = num1;
    }
}

//Class2
class Class2
{
    int class2Num1;

    public Class2(int num1)
    {
        class2Num1 = num1;
    }
}
最后,我想知道如何获取
class2Num1
并将其添加到主类中的
classnum1
。我的意思是想通过一个方法更改
class1Num1
的值,以便在我的程序中引用
class1Num1
时,返回的值是2(class1Num1+class2Num1)。我将如何编写一个方法来实现这一点,以及我必须用什么类来编写它?这可能是一个难以置信的简单任务,我意识到,但我似乎无法理解这一点

从响应来看,getter和setter方法似乎是最好的选择。然而,从我到目前为止看到的示例来看,instance1和instance2似乎必须作为参数在组合这两个数字的主类方法中传递。有没有一种方法可以让我编写一个方法,使它以调用该方法的实例为目标?以下是一个例子:

//this method is being called in Main
instance1.method(int class2){
    int a = getClass1Num1(); 
// ^ how could I target the instance calling this method here?
// 
    int b = class2.getClass2num1();
    int c = a +b;
}

一个很好的面向对象方法是包含一个getter方法来返回类的实例变量。例如,您应该在Class1和Class2中添加这样的方法:

public int getInstanceVar() {
    return class1Num1;  // Or class2Num1 in Class2
}
然后在主类中,可以从新创建的Class1//Class2对象调用此方法,例如:

int result = instance1.getInstanceVar() + instance2.getInstanceVar();

最好使用私有字段gettersetter方法

Class1如下所示

Class2如下所示

主要类别如下


最好的面向对象方法是将类的字段设置为最终字段,当然,这些字段绝对不能更改!!我的意思是,最好的面向对象方法是使类不可变。@Mehrdad我想使类不可变取决于上下文和需求。我不认为OP需要它。这里不讨论最佳OO实践,只是尝试提供一个简单的解决方案,让一个学徒很容易理解。无论如何,答案更新并用“好”替换“最好”:)是的,你是对的,这完全取决于上下文。感谢您的编辑。这对于我的应用程序来说非常有效,因为我将创建我的类的多个实例,并且需要不断更改它们的字段值。我感谢社区在这里提供的所有帮助。我知道你们中的大多数人(如果不是所有人的话)都是专业人士,我感谢你们花时间回答我的问题。有没有一种方法可以让我以调用该方法的实例的num1为目标,而不必显式地将该实例作为参数传递?例如:class1.mathod(class2){inta=class1(调用该方法的实例).num1;intb=class2.getClass2num1;intc=a+b;}
    public class Class1 {

    //fields
    private int class1Num1;

    //getter
    public int getClass1Num1() {
        return class1Num1;
    }

    //setter
    public void setClass1Num1(int class1Num1) {
        this.class1Num1 = class1Num1;
    }
}
public class Class2 {

    //fields
    private int class2Num1;

    //getter 
    public int getClass2Num1() {
        return class2Num1;
    }

    //setter
    public void setClass2Num1(int class2Num1) {
        this.class2Num1 = class2Num1;
    }
}
public class Main {

    public static void main(String[] args) {

        //Set class1Num1
        Class1 instance1 = new Class1();
        instance1.setClass1Num1(1);

        //Set class2Num1
        Class2 instance2 = new Class2();
        instance2.setClass2Num1(1);

        //add class1Num1 + class2Num1
        int sum = instance1.getClass1Num1() + instance2.getClass2Num1();

        //Set sum into class1Num1 of instance1
        instance1.setClass1Num1(sum);

        //Printing class1Num1 (2)
        System.out.println(instance1.getClass1Num1());

    }
}