Подтвердить что ты не робот

Статическая переменная в разных подклассах - исправлена

Мне было интересно, что произошло, если я определяю базовый объект Activity со всеми моими действиями в качестве подклассов. Затем я объявляю статическую переменную в базовом классе, будут ли все подклассы использовать SAME static или будет один для каждого подкласса.

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

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 if должен быть истинным или ложным?

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

Если я сейчас запустил MyActivity1, и он устанавливает значение в "myStatic". Затем он выходит и затем я начинаю MyActivity2 - должен У меня все еще есть значение, установленное первая активность? В приведенном выше примере, будет ли утверждение "если" истинным или ложь?

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