Ответ 1
Статический статический. Они будут ссылаться на один и тот же объект.
Мне было интересно, что произошло, если я определяю базовый объект 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 более одного раза, то, очевидно, я бы получил одну и ту же статическую переменную. Однако здесь я каждый раз создаю отдельный подкласс.
У меня создается впечатление, что это то, что происходит со мной, но хочу быть уверенным.
Статический статический. Они будут ссылаться на один и тот же объект.
Статические переменные относятся к объекту Class, а не к экземплярам. Существует только один объект класса (для этого класса), поэтому есть только один экземпляр статической переменной, поэтому "да, они все видят одну и ту же переменную".
Подклассы имеют видимость переменной, если она защищена или общедоступна.
Если я сейчас запустил MyActivity1, и он устанавливает значение в "myStatic". Затем он выходит и затем я начинаю MyActivity2 - должен У меня все еще есть значение, установленное первая активность? В приведенном выше примере, будет ли утверждение "если" истинным или ложь?
Все подклассы будут иметь один и тот же экземпляр класса static
. поэтому утверждение if
истинно