Java 调用超级类onResume()和onCreae()

Java 调用超级类onResume()和onCreae(),java,android,android-fragments,Java,Android,Android Fragments,我有两个片段A和B。B扩展片段A,所以 public class A extends Fragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //other stuff } @Override public void onResume() { su

我有两个片段A和B。B扩展片段A,所以

public class A extends Fragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //other stuff
    }
    @Override
    public void onResume()
    {
        super.onResume();
        someFunctionOnlyUsefulInFragmentA()
    }
}
第二节课:

public class B extends A{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //other stuff
    }
    @Override
    public void onResume()
    {
        super.onResume();
        //Problem! I don't want to call function "someFunctionOnlyUsefulInFragmentA()"
    }
}
问题是,我不想执行片段A的
onResume()
onCreate()
方法中的所有代码,而是执行一些自定义代码,这些代码只在片段B中使用。但是android强制我调用
super.onCreate()
super.onResume()

为了执行片段B的
onCreate()
onResume()
方法中的一些自定义代码,而不调用片段A中的自定义代码,我该怎么做


我需要改变我的整个代码设计吗?如果是这样,怎么做?

您可以做几件事:

  • 不要让B类扩展A类,让它扩展
    Fragment
  • 做一些事情来恢复B类的
    onResume()中的
    someFunctionOnlyUsefulInFragmentA()
    的效果
  • 不要将
    someFunctionOnlyUsefulInFragmentA()
    放在类A的
    onResume()
    中,或者在其前面放置一个条件,以防止在某些情况下调用该函数

  • 你可以做几件事:

  • 不要让B类扩展A类,让它扩展
    Fragment
  • 做一些事情来恢复B类的
    onResume()中的
    someFunctionOnlyUsefulInFragmentA()
    的效果
  • 不要将
    someFunctionOnlyUsefulInFragmentA()
    放在类A的
    onResume()
    中,或者在其前面放置一个条件,以防止在某些情况下调用该函数


  • 您的问题与继承有关,而不是与Android片段有关。例如,您需要重新考虑类的设计,而不是从类
    A
    派生类
    B
    ,引入类
    BaseFragment
    ,它们都有
    A
    B
    派生(并共享一些功能),并将
    someFunctionOnlyUsefulInFragmentA()
    仅在
    片段中。您试图在上面做的显然违反了。

    您的问题与继承有关,而不是与Android片段有关。例如,您需要重新考虑类的设计,而不是从类
    A
    派生类
    B
    ,引入类
    BaseFragment
    ,它们都有
    A
    B
    派生(并共享一些功能),并将
    someFunctionOnlyUsefulInFragmentA()
    仅在
    片段中。您试图在上面执行的操作显然违反了。

    那么,只需将代码放在片段A的onResume中,您就不必调用
    super.onCreate()
    super.onResume()
    。“Android强迫你”是什么意思?好吧,我确实需要在片段A的onResume()方法中执行一些代码!如果我没有包含超级调用,我的应用程序就会崩溃。
    如果{call method}的instanceof A{not}
    @TimCastelijns,你能详细说明一下你将把代码放在哪里吗?那么您将如何检查该实例呢?那么只需不将代码放在片段A的onResume中,您就不必调用
    super.onCreate()
    super.onResume()
    。“Android强迫你”是什么意思?好吧,我确实需要在片段A的onResume()方法中执行一些代码!如果我没有包含超级调用,我的应用程序就会崩溃。
    如果{call method}的instanceof A{not}
    @TimCastelijns,你能详细说明一下你将把代码放在哪里吗?你会如何检查实例?选项2会非常愚蠢(无意冒犯)你不知道它做了什么,也许它做了一些非常无用的事情,你可以很容易地还原它。不管它做什么,这是愚蠢的概念。是的,问题一点也不愚蠢。这个家伙想创建一个不做其父类所做的事情的类。当你想到继承的概念时,这是可以理解的。对吗?选项2会非常愚蠢(无意冒犯)你不知道它做了什么,也许它做了一些非常无用的事情,你可以很容易地将其还原。不管它做什么,这是一个愚蠢的概念。是的,问题一点也不愚蠢。这个家伙想创建一个不做其父类所做的事情的类。当你想到继承的概念时,这是可以理解的。对吗?利斯科夫替换原理为+1井利斯科夫替换原理为+1井利斯科夫替换原理