我需要在Java中模仿多继承。它可能是错误的设计,但是,由于我的问题不是(父)类功能,我无法用接口模仿该功能。
这是对问题的更多描述。
我有一个名为AbstractModel.java
的类,有许多方法。另一方面,还有另一个班级AbstractTableModel.java
。现在假设有一个名为table controller.java的类处理AbstractModel.java
,另一方面有一个名为Tableview
的类.java处理AbstractTableModel.java
。我需要以某种方式来定义:公共类A扩展AbstractModel
,AbstracTableModel
,以便视图和控制器都可以使用具有扩展名的相同类。请注意,解决方案AbstractTableModel.java
extends AbstractModel
不是解决方案,因为它是内置的java类。
谢谢。
答案 0 :(得分:1)
您无法直接在Java中执行此操作,但可以使用delegation design pattern。看here。这是一个非常类似的问题。
答案 1 :(得分:0)
更改需要AbstractTableModel
的代码,以便它接受TableModel
代替(这是AbstractTableModel
实现的接口)。无论如何应该这样做。当你可以依赖于接口时,永远不要依赖具体的实现。
然后,您可以轻松地让课程AbstractModel
实施TableModel
。
您可能还应该考虑为AbstractModel
创建一个界面。通常会创建一个接口X
,一个抽象基础实现AbstractX
,它提供所有实现共享的通用功能,以及实现MyX
,YourX
等。只有具体的实现(但不一定所有这些都知道并依赖于AbstractX
,但没有这个层次结构之外的代码。
Java Collections Framework就是一个很好的例子:例如List
,AbstractList
,ArrayList
和LinkedList
,但没有实际依赖的代码在AbstractList
上。列表中的大多数用户只使用任何List
,或者如果出于某种原因需要具体实现,则他们依赖于此。