Статическая переменная для нескольких разных подклассов - исправлено - PullRequest
13 голосов
/ 02 июня 2011

Мне было интересно, что произойдет, если я определю базовый объект Activity со всеми своими действиями в качестве подклассов этого.Затем я объявляю статическую переменную в базовом классе, будут ли все подклассы использовать ОДНУ ЖЕ статическую или будет одна для подкласса.

Например.Мой базовый класс:

public class MyBaseActivity extends Activity{

   static int myStatic;

   ... 
   ....

}

Тогда:

public class MyActivity1 extends MyBaseActivity {


   private void someMethod1(){
         myStatic = 1;
    }

   ... 
   ....

}

и

public class MyActivity1 extends MyBaseActivity {

   private void someMethod2(){
          if (myStatic == 1)
            doSomething();
    }

   ... 
   ....

}

Если я сейчас запустил MyActivity1 и он установит значение в «myStatic».Затем он завершает работу, а затем я запускаю MyActivity2. Должен ли я иметь значение, установленное первым действием?В приведенном выше примере, будет ли выражение «if» истинным или ложным?

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

У меня складывается впечатление, что это то, что со мной происходит, но я хочу быть уверенным.

Ответы [ 3 ]

12 голосов
/ 02 июня 2011

Статический статический. Они будут ссылаться на один и тот же объект.

6 голосов
/ 02 июня 2011

Статические переменные принадлежат объекту Class , а не экземплярам.Существует только один объект Class (для этого класса), поэтому существует только один экземпляр статической переменной, поэтому «да, они все видят одну и ту же переменную».

Подклассы имеют видимость переменной, если она защищена илиобщественности.

5 голосов
/ 02 июня 2011

Если я сейчас запускаю MyActivity1, и он устанавливает значение в «myStatic».Затем он завершает работу, а затем я запускаю MyActivity2. Должен ли я иметь значение, установленное первым действием?В приведенном выше примере, будет ли оператор if истинным или ложным?

Все подклассы будут иметь один и тот же экземпляр класса static.поэтому утверждение if верно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...