首页 > 解决方案 > 为什么每当我在父类 - Android 中触发操作时,我的子类方法总是被调用?

问题描述

我正在尝试将父调用(例如 A)继承给我的子类(例如 B)。此外,我的父类与另一个类接口,因此,简而言之,我的父类有一些@Override方法及其实现。此外,我的 Child 类与 Parent 类的接口相同,但实现不同。

问题是,当我尝试从 Parent 类触发任何动作时,它会检查来自 Child 类而不是 Parent 类本身的响应。

我希望 Parent 类应该处理它自己的动作,而 Child 类应该处理它自己的动作。有可能还是有什么方法可以实现?

我希望你有我的问题。这都是关于继承和接口实现的。下面是我的代码示例:

家长班:A

public class A extends AppCompatActivity implements VolleyJsonRespondsListener{

    @Override
    public void onSuccessJson(String response, String requestName) {

        switch (requestName) {

            case "abc":
            CommonFunctions.showToastTest(context, "abc toast");

            break;
        }
}

儿童班:B

public class B extends A implements VolleyJsonRespondsListener {

        @Override
        public void onSuccessJson(String response, String requestName) {

            switch (requestName) {

                case "xyz":
                CommonFunctions.showToastTest(context, "xyz toast");

                break;

            }

}

解决方案之一是这个,但我不想要这个

public class B extends A implements VolleyJsonRespondsListener {

            @Override
            public void onSuccessJson(String response, String requestName) {

                switch (requestName) {

                    case "xyz":
                    CommonFunctions.showToastTest(context, "xyz toast");

                    break;

                    case "abc":
                    CommonFunctions.showToastTest(context, "abc toast");

                    break;
                }

    }

标签: javaandroidinheritanceinterface

解决方案


我认为您可以按如下方式更改代码:

// Don't need "implements VolleyJsonRespondsListener" because A already implemented it. So, just override onSuccessJson
public class B extends A {

    @Override
    public void onSuccessJson(String response, String requestName) {
        if("xyz".equals(requestName)) {
             // Child class expects "xyz". Handle it.
             CommonFunctions.showToastTest(context, "xyz toast");
        } else {
            // requestName not expected by Child class. Delegate to parent via super.onSuccessJson();
            super.onSuccessJson(response, requestName);
        } 
    }
}

推荐阅读