stringtranslate.com

Переменная экземпляра

В объектно -ориентированном программировании на основе классов переменная экземпляра — это переменная, определенная в классе (т. е. переменная-член ), для которой каждый экземпляр объекта класса имеет отдельную копию или экземпляр . [1] [2] Переменная экземпляра имеет сходство с переменной класса , [3] но не является статической . Переменная экземпляра — это переменная, которая объявлена ​​в классе, но вне конструкторов , методов или блоков . Переменные экземпляра создаются при создании экземпляра объекта и доступны всем конструкторам, методам или блокам в классе. Переменной экземпляра могут быть заданы модификаторы доступа .

Переменная экземпляра не является переменной класса , [4] хотя есть сходства. Оба являются типом атрибута класса (или свойства класса, поля или члена данных). В то время как значение переменной экземпляра может различаться между экземплярами класса, переменная класса может иметь только одно значение в любой момент времени, общее для всех экземпляров. Та же дихотомия между членами экземпляра и класса применима и к методам («функциям-членам»).

Каждая переменная экземпляра существует в памяти в течение всего срока жизни объекта, которому она принадлежит. [5]

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

Переменные экземпляра могут использоваться всеми методами экземпляра объекта, но не могут использоваться методами класса. Переменная экземпляра также может быть изменена напрямую, при условии, что установлены ограничения доступа . [6]

Пример

С++

запрос структуры {   static int count1 ; // имя переменной не имеет значения int number ;      Request () { number = count1 ; // изменяет переменную экземпляра "this->number" ++ count1 ; // изменяет переменную класса "Request::count1" }        };int Запрос :: count1 = 0 ;   

В этом примере C++ переменная экземпляра Request::numberявляется копией переменной класса Request::count1 , где каждому сконструированному экземпляру присваивается последовательное значение , count1прежде чем он увеличивается на единицу . Поскольку numberявляется переменной экземпляра, каждый Requestобъект содержит свое собственное уникальное значение; напротив, Request::count1всем экземплярам класса доступен только один объект с тем же значением.

Ява

//Пример.java Пример класса { public int x = 0 ; public void setX ( int newValue ) { this.x = newValue ; } }                //Главная.javaclass  Main { public static void main ( String [] args ) { Example example1 = new Example (); Example example2 = new Example (); //Мы можем установить значение x само по себе, так как переменная является публичной example1 . x = 10 ; assert example1 . x == 10 ; assert example2 . x == 0 ; //Поскольку setX является методом экземпляра, он также может получить доступ к переменной example2 . setX ( - 10 ); assert example1 . x == 10 ; assert example2 . x == - 10 ; } }                                            

В этом примере Java мы видим, как переменные экземпляра могут быть изменены в одном экземпляре, не влияя на другой.

Питон

класс  Собака :  def  __init__ ( self ,  breed ):  self.breed = breed # переменная  экземпляра  # dog_1 — это объект , # который также является экземпляром класса Dog dog_1  =  Dog ( "Border Collie" )

В приведенном выше коде Python переменная экземпляра создается при анализе аргумента в экземпляре с указанием позиционного аргумента породы.

Ссылки

  1. ^ "Переменные экземпляра в программировании на C++". Dremendo . Получено 2024-03-08 .
  2. ^ "Переменные Java". GeeksforGeeks . 2017-02-06 . Получено 2024-03-08 .
  3. ^ "The Java Tutorial, Variables". docs.oracle.com . Oracle. Архивировано из оригинала 23 октября 2014 г. Получено 23 октября 2014 г.
  4. ^ "Разница между переменной экземпляра и переменной класса". GeeksforGeeks . 2021-04-26 . Получено 2024-03-08 .
  5. ^ "The Java Tutorials, Understanding Class Members". docs.oracle.com . Oracle. Архивировано из оригинала 11 октября 2014 г. Получено 23 октября 2014 г.
  6. ^ Matuszek, David. "Static". cis.upenn.edu . Университет Пенсильвании. Архивировано из оригинала 23 октября 2014 года . Получено 23 октября 2014 года .