我有以下类,表示网页
App
Header
TableOperations
Header
对所有页面都是通用的。所以我可以这样写:
class App extends Header
TableOperations
类表示与表相关的操作。所有的网页也都有一个表格,有共同的操作。现在我该如何设计这3个类呢?
现在,App
如何使用这两个类和方法呢?
我不能在java中扩展两个类。还有别的办法吗?
发布于 2014-02-13 11:37:31
我建议使用组合,而不是使用继承,继承应该用于具有is a
关系的对象。如果继续使用继承策略,您可能会构建一个大型的类层次结构,其中每个类都扩展了另一个类,这并不可取。
class App{
Header header = new Header();
TableOperations operations = new TableOperations();
}
发布于 2014-02-13 11:38:01
Composition是你的朋友。我可能会让您的类实现它们特定的接口。然后,您可以使用多个接口继承来指定App
将从您的其他2个接口实现功能。
例如:
class Header implements IHeader
class TableOperations implements ITableOperations
class App implements IHeader, ITableOperations {
private final IHeader header = new Header();
// method declared in IHeader
public void methodForHeader() {
header.methodForHeader();
}
}
然后,App
将适当地委托底层实现Header
和TableOperations
(最有可能作为成员实现)
等等。
发布于 2014-02-13 11:39:39
你可以使用Header
使用is-a
,也就是结构的一部分,对所有的层次结构都有共同的状态。还有operations
has-a
structure,因为operations
这个名字说他只有操作,没有state
。当然,这取决于您的结构和需求。
class App extends Header {
TableOperations ops = new TableOperations();
}
https://stackoverflow.com/questions/21753070
复制相似问题