【问题标题】:can subclass initialize superclass variable可以子类初始化超类变量
【发布时间】:2016-09-29 16:41:36
【问题描述】:

我有一个活动说 A 由许多其他活动扩展,我在活动 A 中有一个变量,所有其他子活动(类)都使用它来扩展它。我想知道我是否可以从子活动中为该变量设置一个值,以便更改将反映在扩展活动 A 的所有其他子类中。 我知道这是一个基本问题,我对此很陌生,感谢任何帮助。

eg:
Activity A has
public String global = "ABC"

Activity B extent A
display(global); ---> ABC

Activity C extent A
display(global); ---> ABC

Activity D extent A
display(global); ---> ABC  

现在我如何在活动 D 中更改全局,以便活动 B 和 C 也应该受到影响。

【问题讨论】:

标签: java android class inheritance


【解决方案1】:

似乎您想要一个变量,其值始终保持不变。

但由于您只想让继承的类能够更新或读取变量,您可以执行以下操作:

class A
{
  private static int your_var = 0;

  public int get()
  {
     return your_var;
  }
  public void set(int a)
  {
      your_var = a;
  }
}

 class B extends A
  {

  }

  class C extends A
  {

  }

在您的静态 void main 中:

  new B().set(101);

  new C().get()  // this will return value 101.

注意:这里只创建了变量 your_var 的一份副本。由于它是私有的,只有非静态的 getter setter 方法才能读取或修改它。从而使其只能由包含类本身或子类对象访问。

【讨论】:

    【解决方案2】:

    您需要在 Activity A 中创建一个静态变量。

    静态变量是类的变量,而不是对象的变量。

    【讨论】:

    • 我在活动 A 中使用了一个静态变量,并在活动 B(扩展活动 A)中更改了它的值,但是当调用活动 C(扩展活动 A)时,更改没有生效。
    【解决方案3】:

    您可以拥有一个可以保存全局数据的单例类,并且在需要时您可以从单例类的单个公共共享实例中获取数据。但是还有另一种更好的方法。

    您需要一门课程,该课程位于您的活动之上。在任何应用程序中,我们通常都有一个这样的类(可能是一些 Initilizer 或 main 或 manager 类),它连接实体并启动我们的应用程序。

    在 android 中,我们有可以保存全局数据的 Application 类。参考见Android global variable

    【讨论】:

      【解决方案4】:

      尝试以下方法: A类

      public static String global = "ABC";
      

      B类

      public class B extends A {
      
      
          public static void main(String[] args) {
          B b = new B();
          A a = new A();
          System.out.println(b.global);
          System.out.println(a.global);
          System.out.println(global);
          }
      
      }
      

      或者,您可以尝试使用封装:将字符串标记为私有,并通过 getter 和 setter 使“全局”字符串可用。这通常是比使用静态变量更灵活的解决方案

      http://www.tutorialspoint.com/java/java_encapsulation.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-09
        • 2016-11-03
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 2016-08-19
        • 2012-01-20
        相关资源
        最近更新 更多