Может подкласс инициализировать переменную суперкласса

У меня есть действие, скажем, 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 также были затронуты.

4 ответа

Решение

Похоже, вы хотите переменную, значение которой сохраняется и остается неизменным на протяжении всего.

Но так как вы хотите, чтобы ваши унаследованные классы могли обновлять или читать переменную, вы можете сделать что-то вроде этого:

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
  {

  }

В вашей статической пустоте main:

  new B().set(101);

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

Примечание: здесь создается только одна копия переменной your_var. А поскольку он является закрытым, только нестатические методы установки получателя смогут прочитать или изменить его. Таким образом, делая его доступным только для самого содержащего класса или объектов дочернего класса.

Вам нужно создать статическую переменную в Деятельности А.

Статическая переменная - это переменная класса, а не объектов.

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

Вам нужен класс, который стоит на вершине вашей деятельности. В любом приложении у нас обычно есть один такой класс (может быть какой-то класс Initilizer или main или manager), который связывает сущности и инициирует наше приложение.

В Android у нас есть класс приложения, который может хранить глобальные данные. Для справки смотрите глобальную переменную Android

Попробуйте следующее: в классе А

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);
    }

}

в качестве альтернативы вы можете попытаться работать с инкапсуляцией: пометьте строку как приватную и сделайте "глобальную" строку доступной через методы получения и установки. Это часто более гибкое решение, чем работа со статическими переменными.

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

Другие вопросы по тегам