如何使用接口在java中实现多重继承?

如何使用接口在java中实现多重继承?,java,multiple-inheritance,Java,Multiple Inheritance,我需要在Java中模拟多重继承。这可能是错误的设计,但由于我的问题不在于(父)类功能,因此我无法用接口模拟该功能。 下面是关于这个问题的更多描述。 我有一个名为AbstractModel.java的类,其中包含许多方法。另一方面,还有另一个类AbstractTableModel.java。现在假设有一个名为table controller.java的类处理AbstractModel.java,另一方面有一个名为Tableview.java的类处理AbstractTableModel.java。我

我需要在Java中模拟多重继承。这可能是错误的设计,但由于我的问题不在于(父)类功能,因此我无法用接口模拟该功能。 下面是关于这个问题的更多描述。 我有一个名为
AbstractModel.java
的类,其中包含许多方法。另一方面,还有另一个类
AbstractTableModel.java
。现在假设有一个名为table controller.java的类处理
AbstractModel.java
,另一方面有一个名为
Tableview
.java的类处理
AbstractTableModel.java
。我需要以某种方式来定义:公共类A扩展了
AbstractModel
AbstracTableModel
,这样视图和控制器都可以使用具有扩展的同一个类。请注意,解决方案
AbstractTableModel.java
extends
AbstractModel
不是一个解决方案,因为它是一个内置java类


谢谢。

您不能直接在Java中完成,但可以使用。看。这是一个非常类似的问题。

您不能直接在Java中完成,但可以使用。看。这是一个非常类似的问题。

更改需要
AbstractTableModel
的代码,使其接受
TableModel
(这是由
AbstractTableModel
实现的接口)。无论如何都应该这样做。当您可以依赖接口时,千万不要依赖具体的实现

然后您可以很容易地让类
抽象模型
实现
表格模型

您可能还应该考虑为
AbstractModel
创建一个接口。通常,我们会创建一个接口
X
,一个抽象的基本实现
AbstractX
,它提供所有实现共享的公共功能,以及实现
MyX
YourX
等。只有具体的实现(但不一定是所有实现)将知道并依赖于
AbstractX
,但没有超出此层次结构的代码


Java集合框架就是一个很好的例子:例如有
List
AbstractList
ArrayList
LinkedList
,但是没有真正依赖于
AbstractList
的代码。大多数列表用户只使用任何
列表
,或者如果出于某种原因他们需要具体的实现,他们依赖于此。

更改需要
抽象表模型
的代码,以便它接受
表模型
(这是由
抽象表模型
实现的接口)。无论如何都应该这样做。当您可以依赖接口时,千万不要依赖具体的实现

然后您可以很容易地让类
抽象模型
实现
表格模型

您可能还应该考虑为
AbstractModel
创建一个接口。通常,我们会创建一个接口
X
,一个抽象的基本实现
AbstractX
,它提供所有实现共享的公共功能,以及实现
MyX
YourX
等。只有具体的实现(但不一定是所有实现)将知道并依赖于
AbstractX
,但没有超出此层次结构的代码


Java集合框架就是一个很好的例子:例如有
List
AbstractList
ArrayList
LinkedList
,但是没有真正依赖于
AbstractList
的代码。大多数列表用户只使用任何
列表
,或者如果出于某种原因他们需要具体的实现,他们就依赖于此。

你不能制作AbstractModel和AstractTableModel接口吗,然后让类A实现这些接口?另请参见A的示例。您可以将1个类:AbstractModel类或AstractTableModel类转换为接口,然后类A扩展1个类并实现其余接口。因为还有许多其他类扩展AbstractModel。通过将其作为一个接口,我在所有子系统中复制了相同的代码,从而获得了非常多的冗余。抽象表模型是javax.swing.table.AbstractTableModel下的java内置类;你所说的“复制所有子系统中的相同代码”是什么意思?如果您为AbstractModel创建了一个接口(在Eclipse中这只需要不到一分钟的时间),则无需更改任何子级以及其他任何地方(工作区中)的所有方法在使用之前,
AbstractModel
可以在同一步骤中自动更改为接受接口。您不能创建AbstractModel和AstractTableModel接口吗,然后让类A实现这些接口?另请参见A的示例。您可以将1个类:AbstractModel类或AstractTableModel类转换为接口,然后类A扩展1个类并实现其余接口。因为还有许多其他类扩展AbstractModel。通过将其作为一个接口,我在所有子系统中复制了相同的代码,从而获得了非常多的冗余。抽象表模型是javax.swing.table.AbstractTableModel下的java内置类;你所说的“复制所有子系统中的相同代码”是什么意思?如果您为AbstractModel创建了一个接口(在Eclipse中这只需要不到一分钟的时间),则无需更改任何子级以及其他任何地方(工作区中)的所有方法以前使用的
AbstractModel
可以在同一步骤中自动更改为接受接口。我认为
List
AbstractList
在这里不是一个好的比较。后者除了从接口继承的方法外没有其他公共方法,而
AbstractTableModel
继承的公共方法不到其公共方法的一半