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