Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java保护的变量访问和修改规则_Java_Android - Fatal编程技术网

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

Java保护的变量访问和修改规则,java,android,Java,Android,对于Android,我有一个名为AFrag的类,我想知道是否有可能创建可访问子类ex.BFrag的受保护字段,然后超类可以访问子类分配给受保护字段的引用 public class AFrag extends Fragment { protected EditText someEt;... } public class BFrag extends AFrag { @Override onCreateView() { someEt = (

对于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作为子片段加载到AFrag中。当我在AFrag中访问变量时,比如somet.getText会抛出NullPointerException。我的问题是,在AFrag中是否存在对BFrag的xml的引用


我的用例是我有多个动态加载的片段,它们有自己独特的UI EditText视图集,我希望有一个单亲片段,它承载保存按钮,该按钮将在每个子片段中的所有视图上调用getText。

受保护变量在同一个包中时可以在子类中访问。如果BFrag在不同的包中,则不能在子类中访问超类受保护变量。

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

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


但就变量而言,您将能够引用。由于您的超类应该存在于应用程序内存中,因此片段在同一个包中,我的问题是超类是否能够访问子类设置为受保护变量的引用。在我的用例中,在子类初始化它之后,超类的变量仍然为null。我的问题是,超类是否能够访问子类设置为受保护->无超类不能访问子类中存在的变量的引用,即使它是公共变量。在我的用例中,在子类初始化它之后,超类的变量仍然是空的->在我的用例中,超类的变量仍然是空的,在子类初始化它之后->公共类BFrag extensed AFrag{@Override onCreateView{someEt=EditText rootView.findviewbydr.id.edittextinfragxml;…}您正在尝试将超类变量初始化为子类。请检查代码EditText rootView.findViewByIdR.id.EditTextInFragXmlProtected中的值,即使子类不在同一个包中,也可以访问它们。这个答案是错误的,因为它混淆地说,如果BFrag在不同的包中,那么您就不能访问子类中的超类[sic]受保护变量。当AFrag访问变量ex.getText时,NullPointerException从AFrag抛出。变量的引用在BFrag中设置。想法是一样的,我解释了另一种方式