Android:仅在父活动的子活动中调用函数

时间:2015-08-03 15:04:17

标签: java android inheritance

我的 ParentActivity.java 就像这样

public class ParentActivity extends Activity{

    public void childOnlyMethod(){
        Log.d(TAG,"child only method triggered in parent activity");
    }

    public void startChildActivtityButton(){
    startActivity(new Intent(this, ChildActivity.class));
   }
    public void childOnlyMethodButton(){
        childOnlyMethod();
   }
}

我的 ChildActivity.java 就像这样

public class ChildActivity extends ParentActivity{
    @Override
    public void childOnlyMethod(){
       Log.d(TAG,"child only method triggered in child activity");
    }   
}

问题是,当我按下 childOnlyMethodButton时,在父和子活动中调用childOnlyMethod()我希望它只能在子项上调用,我该如何实现?

2 个答案:

答案 0 :(得分:1)

@Override 注释什么也不做,它只用于告诉编译器和IDE这个方法覆盖它的超类。非静态方法与对象相关联,而不是与类相关联。覆盖意味着完全替换其超类中的方法。因此,如果您在ChildActivity上调用childOnlyMethod,则只会调用子版本。

我猜你实际上是在点击父活动实例。我真的不明白为什么要在父引用上调用子方法。如果您可以发布真实的代码,我可以给您更准确的答案。

但是,您可以尝试以下代码。此示例仅在ChildActivity实例上调用子版本childOnlyMethod。但是,如果单击ParentActivity上的按钮,它仍会调用父级的childOnlyMethod。

public class ParentActivity extends Activity implements View.OnClickListener {
    private static final String TAG = "ParentActivity";

    private Button mStartChileButton;
    private Button mButton;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mStartChileButton = (Button) findViewById(R.id.startChileButton);
        mButton = (Button) findViewById(R.id.button);

        mStartChileButton.setOnClickListener(this);
        mButton.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.R.id.startChileButton:
                startActivity(new Intent(this, ChildActivity.class));
                break;
            case R.id.R.id.button:
            default:
                childOnlyMethod();
                break;
        }
    }

    public void childOnlyMethod() {
        Log.d(TAG, "Called from ParentActivity");
    }
}

public class ChildActivity extends ParentActivity {
    private static final String TAG = "ChildActivity";

    @Override
    public void childOnlyMethod() {
        Log.d(TAG, "Called from ChildActivity");
    }
}

答案 1 :(得分:0)

如果要扩展父类,父类中的所有方法都会稍微传递给子类,如果您不希望实现父类中的方法,首先要删除它@Override注释在方法上方的子类中。然后使用下面的剪辑,它所做的只是使父类中的Method为private或protected,以便无法在子类中访问它。

public class ParentActivity extends Activity {

    private void childOnlyMethod(){
        Log.d(TAG,"child only method triggered in parent activity");
    }
    //OR
    protected void childOnlyMethod(){
        Log.d(TAG,"child only method triggered in parent activity");
    }
}