Быстрый ответ, если вы действительно понимаете Классы, Наследование и Объекты: замените @var
(переменная экземпляра, и поэтому отличается в a
и b
) на @@var
(переменная класса, и, следовательно, во всех случаях class A
).
В противном случае ваш вопрос показывает, что у вас есть фундаментальное неправильное понимание того, что происходит с классами, объектами и наследованием.
Ваш код выполняет следующие действия:
- Определяет класс с именем
A
. По сути, это план, из которого вы можете создавать объекты.
- Объявляет, что при создании объекта типа
A
этому объекту должна быть предоставлена собственная личная копия атрибута с именем var
, для которого установлено значение 0
.
- Объявляет, что объектам типа
A
можно задать dosomething
, что увеличивает значение var
этого объекта на 1.
- Определяет класс с именем
B
, который является частным случаем A
Следовательно, во втором фрагменте вы создаете объект a
, который является A
. Он имеет свой собственный атрибут с именем var
, который устанавливается в 0, а затем увеличивается. Затем вы создаете b
, который является B
(и, следовательно, также A
). b
имеет свой собственный атрибут с именем var
, отдельно от a
'var
, для которого установлено значение 0.