跨多个不同子类的静态变量 - 已更正

2022-09-04 08:22:57

我想知道如果我定义一个基本活动对象,并将我的所有活动作为该对象的子类,会发生什么。然后,我在基类中声明一个静态变量,所有子类都将使用相同的静态变量,还是每个子类都有一个。

例如。我的基类:

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,那么显然我会得到相同的静态变量。但是,在这里,我每次都实例化不同的子类。

我得到的印象是,这就是发生在我身上的事情,但想确定一下。


答案 1

静态就是静态。它们将引用同一对象。


答案 2

静态变量属于 Class 对象,而不是实例。只有一个 Class 对象(对于该类),因此静态变量只有一个实例,因此“是的,它们都看到相同的变量”。

子类具有变量的可见性(如果它是受保护的或公共的)。


推荐