繁体   English   中英

为什么java下属对象不能访问父字段?

[英]Why can't java subordinate object access parent field?

我有一个我实例化两次的对象,每个对象都需要影响另一个对象中的某些东西。 是的,它很难看,但在Android中,我想在一个显示/标签中设置一个单选按钮,与另一个显示/标签中的状态相匹配。 我想我可以在父级中有一个方法来更新单选按钮的两个实例,这可能是一种更好的方法。 但我不明白为什么我在下面所做的事情不起作用,我想理解为什么即使我不使用它。

我将在本例中使用'someField'作为交叉访问字段。 我将'this'传递给父对象的每个实例化对象,然后我应该能够通过我想到的父对象访问另一个'兄弟'对象中的字段,但它似乎不起作用。 这是代码的简化版本(实际上这两个类当然是在两个文件中):

public class EtMain extends TabActivity  {
    public WxFields  mDepWx;
    public WxFields  mArrWx;

    public void onCreate(Bundle savedInstanceState) {
        mDepWx = new WxFields(this);
        mArrWx = new WxFields(this);
    }
}

public class WxFields {
    private Activity mParent; // Main Window object
    public int someField;

    public WxFields(Activity myParent) {
        mParent = myParent;
    }

    public void someSetup() {
        Button mButton = (Button) mParent.findViewById(R.id.someRes); //<---mParent works here
        mParent.mArrWx.someField = 0; //<------------ mArrWx cannot be resolved
        //I don't seem to be able to access a field in the parent object
        //Yes, it's not symmetrical, but the code is just for illustration purposes

    }
}

其实,如果你申报mParentEtMain而不是Activity ,它会工作(虽然这将是丑陋的...)

Activity没有这样的字段( mArrWx

public class EtMain extends TabActivity  {
    public WxFields  mDepWx;
    public WxFields  mArrWx;

    public void onCreate(Bundle savedInstanceState) {
        mDepWx = new WxFields(this);
        mArrWx = new WxFields(this);
    }
}

public class WxFields {
    private EtMain mParent; // Main Window object
    public int someField;

    public WxFields(EtMain myParent) {
        mParent = myParent;
    }

    public void someSetup() {
        Button mButton = (Button) mParent.findViewById(R.id.someRes); //<---mParent works here
        mParent.mArrWx.someField = 0;
    }
}

看起来您必须将mParent为键入EtMain才能使该字段可见。
mArrWx不是Activity类型的成员。

我猜想你会使用一个Listener实现来获取需要保持同步的对象的引用。 动作方法将检查哪个更新并同步另一个。

http://developer.android.com/guide/topics/ui/ui-events.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM