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();
最好使用私有字段和getter和setter方法 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());
}
}