Java 如何仅在条件为真时重写方法?

Java 如何仅在条件为真时重写方法?,java,android,Java,Android,在我的MainActivity类中,如果在我的视图中按下按钮,我想停止重写attachBaseContext方法 情况如下: public class MainActivity extends AppCompatActivity { boolean value = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance

在我的MainActivity类中,如果在我的视图中按下按钮,我想停止重写
attachBaseContext
方法

情况如下:

public class MainActivity extends AppCompatActivity {
    boolean value = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setting content view and stuff
    }

    //the following should be overridden only if value == true. 
    //I can change the value to false by clicking a button in my view.
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(ZeTarget.attachBaseContext(base,this));
    }

    public void stopOverriding (View view) {
        value = false;
    }
在我看来,我的主活动布局中有一个按钮,它在被单击时调用
stopOverriding()
方法:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:onclick="stopOverriding"
android:text="@string/change"/>


我在所有活动中都有相同的重写
attachBaseContext()
方法。我的问题是,单击主活动中的按钮后,是否可以停止在我的所有活动中重写此
attachBaseContext()
方法?

您无法在运行时决定是否重写方法(不动态生成类,这很复杂)[我不知道Dalvik是否支持它])

只需在方法中检查您的状况:

protected void attachBaseContext(Context base) {
    if (this.value) {
        // Your special behavior
        super.attachBaseContext(ZeTarget.attachBaseContext(base,this));
    } else {
        // The super's behavior, as though you hadn't overridden the method
        super.attachBaseContext(base);
    }
}

为什么不根据
value
if(value){foo();}或者{bar();}
@Arc676来改变行为呢?你能进一步说明吗?谢谢,我明白了。因此,根据我想要的行为(覆盖/不覆盖),我必须在MainActivity类本身中声明
true/false。我如何在所有其他活动中使用我设置的此值?我必须在所有其他活动中单独进行声明吗?@Akeshwar:条件可以是该方法可以访问的任何内容。因此,是的,
可以工作,或者它可以访问的任何其他内容n检查。我只是想知道在所有的活动中把<代码>值>代码>的最佳方式。我决定把它存储在我的主要活动中的一个文件中,然后在所有其他文件中访问文件。谢谢你的回答,它解决了我的问题。你应该考虑使用SysPoopy而不是一个文件,因为它是S的首选方式。应用程序的存储键值集:感谢您的响应,@bjornson。我现在正在使用SharedReferences。但我现在在使用它们时遇到了一个新问题。请检查以下内容: