Вы фактически намекали на решение с названием вопроса Совместное использование class атрибутов в Java".
В вашем примере attribute
является переменной экземпляра, котораяозначает, что каждый экземпляр вашего Shared
класса (s1
и s2
) получает собственную копию переменной, и они обновляются независимо.
Вам нужна переменная класса, то есть что-то общеево всех экземплярах класса.В Java это также называется статической переменной.Добавьте ключевое слово static
к объявлению переменной attribute
, чтобы изменить его с переменной экземпляра на переменную класса:
public class Shared {
private static int attribute;
public Shared() {}
public void incrementAttribute(int i) {
attribute += i;
}
public int getAttribute() {
return attribute;
}
public static void main(String[] args) {
Shared s1 = new Shared();
Shared s2 = new Shared();
s1.incrementAttribute(1);
System.out.println(s1.getAttribute());
s2.incrementAttribute(1);
System.out.println(s2.getAttribute());
}
}
- обратите внимание, что вам также необходимо распечатать значение сразу после увеличенияэто, иначе вы получите вывод 2 2.