Java保护变量访问和修改规则

时间:2017-05-30 10:11:35

标签: java android

对于Android,我有一个名为AFrag的类,我想知道是否有可能创建子类可访问的受保护字段(ex.BFrag),然后超类可以访问子类的引用分配到受保护的领域。

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视图集,我希望有一个单独的父片段,它托管“Save”按钮,可以在所有视图上调用getText()在每个孩子的碎片中。

2 个答案:

答案 0 :(得分:1)

当受保护变量位于同一个包中时,可以在子类中访问它。如果BFrag位于不同的包中,则无法访问子类中的超类受保护变量。

答案 1 :(得分:0)

BFragrootView是当前片段视图,而不是AFrag的rootView

因此,您将获得NullPointerException,因为在BFRag中,someEt不存在

但就变量而言,您将可以参考。事实上你的超级类应存在于应用程序内存中