Переменная a
в классе A
является переменной экземпляра :
В объектно-ориентированном программировании с классами переменная экземпляра - это переменная, определенная в class (т.е. переменная-член), для которой каждый экземпляр объекта класса имеет отдельную копию или экземпляр.
Таким образом, каждый экземпляр класса A
будет иметь ОТДЕЛЬНУЮ копию 'a' который изменяется индивидуально от всех других экземпляров класса A
.
В методе show()
класса B
вы создаете новый, ОТДЕЛЬНЫЙ экземпляр класса A
, который отличается от экземпляра из A
, которым вы ранее манипулировали. Значение по умолчанию a
равно нулю, поэтому это единственное значение, которое вы увидите.
Если вы хотите, чтобы show()
работал с конкретным c экземпляром A
, тогда вам нужно будет передать этот экземпляр в качестве параметра:
public void show(A someInstanceOfA) {
System.Out.Println(someInstanceOfA.a)
}
Обратите внимание, что мы НЕ создаем экземпляр класса A
с ключевым словом new
внутри show()
. Мы просто манипулируем или используем локальную ссылку, переданную через параметр someInstanceOfA
.
Вот полный пример, показывающий, как переменная экземпляра a
управляется классом B
:
public class A
{
private int a=0;
public void setA(int value) {
a = value;
}
public int getA() {
return a;
}
}
public class B
{
public void show(A someInstanceOfA) {
System.out.println("B.show(): a = " + someInstanceOfA.getA());
someInstanceOfA.setA(10); // this will modify the instance of A and be reflected back in main()
}
}
public class Driver
{
public static void main(String[] args) {
A instanceA = new A();
instanceA.setA(5);
System.out.println("Before: a = " + instanceA.getA());
B instanceB = new B();
instanceB.show(instanceA);
System.out.println("After: a = " + instanceA.getA());
}
}
Вывод:
Before: a = 5
B.show(): a = 5
After: a = 10