我有两个类(ClassA和ClassB)应该是ListFragment。 这两个类具有共同的行为,因此我创建了一个抽象类(AbstractClass)。 因此AbstractClass继承自ListFragment。 到目前为止,我的ClassA和ClassB继承自从ListFragment继承的AbstractClass。
问题出在我需要另一个应该为Fragment(不是ListFragment)的ClassC但又需要AbstractClass的行为时,但是我不能从中继承,因为ClassC应该只是Fragment,而我的abstractClass是ListFragment。
我想让我的ClassA,ClassB和ClassC从我的AbstractClass继承,但是成为ClassA,ClassB Listfragment和ClassC只是片段。
我确定应该使用Java中的某种设计模式或解决该问题的良好实践。
我知道Java不允许多重继承。
非常感谢
所有这三个类都扩展了AbstractList和ListFragment,但ClassC将在onCreateView()中返回各自的布局。
我不知道您想表达什么意思,但是这样做必须在ClassC布局中使用ListView,并且我不想在该Fragment中使用listview。 我可以将其设置为不可见,不要使用,但我认为这不是很干净。
您可以将常用功能提取到一些帮助程序类吗? 使用合成代替继承
我不确定是否可以使用它,因为我需要使用Fragments类中的生命周期方法。
您可以从生命周期方法中调用辅助方法
是的,您是对的,尽管我不想这样做,但我想我可以做到。 我希望所有子类都有一个抽象的父类,我认为这要干净得多。
创建一个BaseAbstractFragment类,该类将是抽象的并继承自Fragment。 现在创建另一个ListViewAbstractClass(BaseAbstractFragment的子类)并在其中添加ListView,而不是从ListFragment继承它。 现在,从ListViewAbstractClass继承ClassA和ClassB,从BaseAbstractFragment继承ClassC。
有趣的答案,但是将单个listview添加到ListViewAbstractClass中,我将不会拥有ListFragment的所有内置帮助方法...我一直在寻找与此类似的答案,但是我认为这不会起作用。
您的抽象类的目的是什么? 如果它仅具有抽象功能,那么您也可以使用接口。
不,我不能使用接口。 实际上,我只有三种抽象方法。 几乎所有功能都在生命周期方法中。 目的是通过应用程序计费方式进行管理,其中一些在后台运行,还可以在购买后处理下载。