2016-09-29 85 views
-2

我有一個活動說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也應該受到影響。

+1

如果它是一個* instance *變量,那麼任何更改只會影響*該實例*。這聽起來像你*可能*想要一個靜態變量。 –

+0

http://stackoverflow.com/questions/1944656/android-global-variable這解決了我的問題,感謝您的幫助 –

回答

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 
    { 

    } 

在靜態無效的主要:

new B().set(101); 

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

注意:這裏只創建一個變量your_var的副本。由於它是私有的,只有非靜態的getter setter方法才能讀取或修改它。因此只能通過包含類本身或子類對象來訪問它。

0

您需要在活動A.

創建一個靜態變量靜態變量是類的變量,而不是對象。

+0

我在活動A中使用了一個靜態變量,並在活動B(擴展活動A)中更改了它的值,但是當活動C(延長A)被稱爲變更沒有受到影響。 –

0

嘗試以下操作: 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); 
    } 

} 

或者你可以嘗試與封裝工作:標記字符串爲私有,使「全球性」的字符串可通過獲得者和制定者獲得。這通常是一個更靈活的解決方案,然後用靜態變量

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

0

工作,就可以有一個單獨的類,可容納全球的數據,需要的時候可以從單個類的單一常用共享實例獲取數據。但還有另一種更好的方法。

你需要一個坐在你的活動之上的類。在任何應用程序中,我們通常都會有一個這樣的類(可能是Initilizer或主類或經理類),它們連接實體並啓動我們的應用程序。

在android中,我們有可以容納全局數據的Application類。僅供參考,請參閱Android global variable