Переменная экземпляра
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
В на основе классов объектно -ориентированном программировании переменная экземпляра — это переменная, определенная в классе (т. е. переменная-член ), для которой каждый экземпляр объекта класса имеет отдельную копию или экземпляр . [1] [2] Переменная экземпляра имеет сходство с переменной класса . [3] но не статичен . Переменная экземпляра — это переменная, которая объявлена в классе, но вне конструкторов , методов или блоков . Переменные экземпляра создаются при создании экземпляра объекта и доступны всем конструкторам, методам или блокам в классе. Модификаторы доступа могут быть присвоены переменной экземпляра.
Переменная экземпляра не является переменной класса , [4] хотя сходство есть. Оба являются типом атрибута класса (или свойства класса, поля или элемента данных). Хотя значение переменной экземпляра может различаться в разных экземплярах класса, переменная класса может иметь только одно значение одновременно, общее для всех экземпляров. Та же дихотомия между членами экземпляра и класса применима и к методам («функциям-членам»).
Каждая переменная экземпляра живет в памяти в течение всего времени существования объекта, которому она принадлежит. [5]
Переменные экземпляра являются свойствами этого объекта. Все экземпляры класса имеют свои собственные копии переменных экземпляра, даже если значения от одного объекта к другому одинаковы. Один экземпляр класса может изменять значения переменных своего экземпляра, не затрагивая все остальные экземпляры. Класс может иметь как переменные экземпляра, так и переменные класса .
Переменные экземпляра могут использоваться всеми методами экземпляра объекта, но не могут использоваться методами класса. Переменную экземпляра также можно изменить напрямую, если ограничения доступа . установлены [6]
Пример
[ редактировать ]С++
[ редактировать ]struct Request {
static int count1; // variable name is not important
int number;
Request() {
number = count1; // modifies the instance variable "this->number"
++count1; // modifies the class variable "Request::count1"
}
};
int Request::count1 = 0;
В этом примере C++ переменная экземпляра Request::number
является копией переменной класса Request::count1
где каждому построенному экземпляру присваивается последовательное значение count1
прежде чем оно будет увеличено . С number
является переменной экземпляра, каждая Request
объект содержит свое собственное значение; напротив, есть только один объект Request::count1
доступен всем экземплярам класса с одинаковым значением.
Ява
[ редактировать ]//Example.java
class Example {
public int x = 0;
public void setX(int newValue) {
this.x = newValue;
}
}
//Main.java
class Main {
public static void main(String[] args) {
Example example1 = new Example();
Example example2 = new Example();
//We can set the value of x by itself, as the variable is public
example1.x = 10;
assert example1.x == 10;
assert example2.x == 0;
//As setX is an instance method, it can also access the variable
example2.setX(-10);
assert example1.x == 10;
assert example2.x == -10;
}
}
В этом примере Java мы можем увидеть, как переменные экземпляра могут быть изменены в одном экземпляре, не затрагивая другой.
Питон
[ редактировать ]class Dog:
def __init__(self, breed):
self.breed = breed # instance variable
# dog_1 is an object
# which is also an instance of the Dog class
dog_1 = Dog("Border Collie")
В приведенном выше коде Python переменная экземпляра создается при анализе аргумента в экземпляре со спецификацией позиционного аргумента породы.
Ссылки
[ редактировать ]- ^ «Переменные экземпляра в программировании на C++» . Дремендо . Проверено 8 марта 2024 г.
- ^ «Переменные Java» . Гики для Гиков . 06 февраля 2017 г. Проверено 8 марта 2024 г.
- ^ «Учебник по Java, переменные» . docs.oracle.com . Оракул. Архивировано из оригинала 23 октября 2014 года . Проверено 23 октября 2014 г.
- ^ «Разница между переменной экземпляра и переменной класса» . Гики для Гиков . 26 апреля 2021 г. Проверено 8 марта 2024 г.
- ^ «Учебные пособия по Java, понимание членов класса» . docs.oracle.com . Оракул. Архивировано из оригинала 11 октября 2014 года . Проверено 23 октября 2014 г.
- ^ Матушек, Дэвид. «Статика» . cis.upenn.edu . Пенсильванский университет. Архивировано из оригинала 23 октября 2014 года . Проверено 23 октября 2014 г.