Skip to main content

Что такое переменная экземпляра?

Переменная экземпляра - это фрагмент данных в объектно-ориентированном программировании, который имеет свое уникальное значение для каждого объекта, в котором он находится. Переменные экземпляра также могут называться элементами экземпляра, нестатическими полями и элементами данных. Они являются важной частью большинства объектов и содержат определенные фрагменты данных, которые объект использует для расчетов.

Например, если существует два объекта, A и B, где у объекта A есть переменная экземпляра, называемая «бла», а у объекта B также есть переменная экземпляра, называемая «бла», две переменные «бла» являются различными объектами. Каждая переменная связана с объектом, который ее инкапсулирует. Полное имя переменной «blah», связанной с объектом A, - «A.blah», а полное имя переменной «blah», связанной с объектом B, - «B.blah». Каждая из этих переменных может иметь свое значение. Если объекты A и B относятся к одному типу, и создается другой объект этого типа, C, и объект C также будет иметь переменную экземпляра «blah», которая может иметь свое собственное уникальное значение.

Переменные экземпляра часто путают со статическими переменными, но они существенно различаются. В отличие от переменных экземпляра, для которых каждый объект определенного типа имеет свои собственные, статические переменные имеют только одно значение, и это значение одинаково для каждого объекта соответствующего типа. Статические переменные часто называют переменными класса, которые не совпадают с переменными экземпляра.

В зависимости от назначенных им свойств видимости переменные экземпляра могут быть видны только внутри конкретного объекта, для объекта и его подклассов или для объекта, в котором он находится, а также для любых других объектов. Этот последний тип видимости, называемый публичной видимостью, часто считается плохой практикой для переменных экземпляра, поскольку в объектно-ориентированном программировании легко нарушать принципы инкапсуляции. Несмотря на это табу, бывают случаи, когда публичные переменные экземпляра полезны. Например, многие стандартные классы в Java имеют общедоступные переменные экземпляра, что иногда позволяет легко изменять свойства.

Видимость переменной экземпляра также вступает в игру с наследованием. Если один класс наследуется от другого, это не сразу дает обоим классам доступ к переменным экземпляра друг друга. Частные переменные экземпляра в суперклассе и подклассе остаются ограниченными только этими классами, поэтому суперкласс не может видеть закрытую переменную в подклассе, и наоборот. Единственные переменные экземпляра, которые могут видеть как суперкласс, так и подкласс, - это защищенные переменные в суперклассе.