2017-05-30 110 views
0

對於Android,我有一個名爲AFrag的類,我想知道是否可以創建子類可訪問的受保護字段(ex.BFrag),然後超類可以訪問分配給受保護字段的子類的引用。Java受保護的變量訪問和修改規則

public class AFrag extends Fragment 
{ 
    protected EditText someEt;... 
} 

public class BFrag extends AFrag 
{ 
    @Override 
    onCreateView() 
    { 
      someEt = (EditText) rootView.findViewById(R.id.EditTextinBFragXml);... 
    } 
} 

BFrag作爲childFragment在AFrag中加載。當我訪問AFrag中的變量時,像someEt.getText()會拋出NullPointerException。我的問題是否引用了BFrag的xml存在於AFrag中?

我的用例是我有自己獨特的UI EditText視圖的多個動態加載片段,我想有一個單獨的父片段,承載「保存」按鈕,將調用所有的getText()在每個孩子片段中查看。

回答

1

受保護的變量在子類中可以在同一個包中訪問。如果BFrag在不同的包中,則不能訪問子類中的超類保護變量。

+0

這些片段位於同一個包中,我的問題是超類是否能夠訪問子類設置爲受保護變量的引用。在我的用例中,超類的變量在子類初始化之後仍然爲空。 –

+0

「我的問題是超類是否能夠訪問子類設置爲受保護的引用」 - >否超類無法訪問子類中的變量,即使它是公共變量。 「在我的使用情況下,超類的變量仍然是零,後子類初始化它」 - > –

+0

「在我的使用情況下,超類的變量仍然是空,子類初始化後,它」 - >'公共類BFrag擴展AFrag { @override onCreateView(){ someEt =(EditText上)rootView.findViewById(R.id.EditTextinBFragXml); ... } }'你想初始化超類變量subclass.Please檢查什麼價值來了在代碼中(EditText)rootView.findViewById(R.id.EditTextinBFragXml) –

0

BFragrootView是當前片段觀看,而不是AFrag的rootView

所以你會得到NullPointerException,因爲在BFRagsomeEt不存在

但就變量而言,你會能夠參考。事實上,你的超類應該存在於應用程序內存中

+0

當AFrag訪問變量(例如getText())時,NullPointerException從AFrag中拋出,該變量的引用在BFrag中設置。 –

+0

想法是一樣的,我解釋了另一種方式 – Stallion