Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多重继承设计模式?_Java_Android_Design Patterns - Fatal编程技术网

Java多重继承设计模式?

Java多重继承设计模式?,java,android,design-patterns,Java,Android,Design Patterns,我有这样的结构: 第一类 类2扩展类1 我有一堆实用程序类,需要一个Class2来完成各种工作 问题是:我需要创建一个扩展Class2的Class3来使用这些类。Class3将拥有谷歌API的Android地图视图。只能从扩展MapActivity的类创建地图视图。我需要 Class3扩展了Class2和MapActivity。 这是不可能做到的 将class3更改为仅扩展MapActivity需要修改从以前的开发人员那里继承的大量代码(没有双关语) 将我的class3更改为仅扩展Cla

我有这样的结构:


第一类

类2扩展类1

我有一堆实用程序类,需要一个Class2来完成各种工作

问题是:我需要创建一个扩展Class2的Class3来使用这些类。Class3将拥有谷歌API的Android地图视图。只能从扩展MapActivity的类创建地图视图。我需要


Class3扩展了Class2和MapActivity。

这是不可能做到的

将class3更改为仅扩展MapActivity需要修改从以前的开发人员那里继承的大量代码(没有双关语)

将我的class3更改为仅扩展Class2中断,因为映射需要MapActivity

最好的方法是什么


编辑:有几个人提到了“接口解决方案”。听起来是正确的解决方案。不过,我忘了提到Class2是一个抽象类,移动实现的方法将是一件痛苦的事情。大量代码重复。。。这件衣服干了就湿了……:)

由于Java不支持多重继承,因此需要进行变通。如果我是你,我会制作一个接口,定义你需要的所有东西,然后扩展你的
Class1

您可以简单地使
Class1
extend
MapActivity
,除非它已经扩展了其他内容,但只有当
Class2
应该扩展
MapActivity
时,您才会真正想这样做。您的
Class2
可以扩展
Class1
Class3
可以扩展
Class1
Class1
可以扩展
MapActivity


希望这有帮助

与其让class 3扩展MapActivity,为什么不尝试实现它呢?
我遇到了一个与您非常相似的问题,并通过使用实现解决了它。

从我所看到的情况来看,这个问题最类似于java的解决方案如下所示

  • 通常,尝试使用接口来定义需要扩展的类型。例如,
    JTable
    使用
    TableModel
    接口,可以从头开始实现,也可以通过扩展
    AbstractTableModel
    DefaultTableModel

  • 可以理解,这并不总是可能的。在本例中,您可以使用类型为
    Class1
    的私有字段设计
    Class3
    。然后根据需要实现尽可能多的包装器方法,将所有传入方法传递给内部对象


  • 当然,(2)将提供
    Class1
    的所有行为,但实际上不是
    Class1
    的实例,这可能会破坏系统中的其他内容。这个问题的答案是(再次)更多地利用接口。

    您能否创建扩展MapActivity的Class4并将Class3用作Class4内部的组合。然后您可以委托给Class3的API。显然,如果不需要访问Class3及更高版本的一些内部构件,这将起作用


    如果您需要访问Class3的内部,然后,您可以让Class5扩展Class3来创建API,这有助于克服无法访问内部的限制。

    是的,Niall C.是对的。我对这一点很陌生,但我知道Java不支持类的多继承,相反,您可以创建一个定义所有要使用的方法和成员的接口,并实现它。

    是否有任何类
    Class1到class3
    扩展了“活动”?没有。。。这是问题的一部分,顺便说一句,难以置信你们跳得这么快。我无法想象人们在stackoverflow之前是如何编程的…:)检查此项以获取此问题的解决方案。询问后发现:已尝试。问题是我的Class1扩展了LinearLayout,如果您尝试“extends LinearLayout implements MapActivity”,则会在类之间产生一些冲突(不记得发生了什么冲突)。注意:在其他情况下,这将是一个很好的解决方案。(仅供参考)