在子 class 中构建方法继承/隐藏方法
Architecturing method inheritance / hiding method in child class
我正在尝试编写一些与确定性有限自动机相关的算法。所以显而易见的开始是定义实体:DFA
、State
和 Edges
。然而,我虽然因为 DFA
是一种图表,我应该有基本的 classes Graph
、Node
和 Edge
每个实现 IGraph
, INode
和 IEdge
。然后 DFA
和 State
扩展 Graph
和 Node
.
所以 Graph
的精简代码是:
class Graph
{
//...
public void addNode(INode node)
{
//...
}
//...
}
现在 State
和 Node
之间的主要区别是 State
将属性 isFinalState
和 isStartingState
添加到 Node
。所以我希望通过 Graph
的 addNode()
方法将 State
对象添加到 DFA
而不是 Node
对象。
我认为我可以在 DFA
中覆盖并创建此方法 private
并定义了一个新方法 addState()
它将接受 State
对象。但是在 Java 中不允许降低派生 class 中父 class 成员的可见性。
那么在这种情况下遵循的标准解决方案/方法是什么。还是我认为这一切都错了?
如果我正确地理解了你的例子,你可以通过泛型来实现:
class Graph<T extends Node> {
public void addNode(T node) { ... }
}
class DFA extends Graph<State> {
@Override
public void addNode(State node) { ... }
}
如果您的 DFA
class 延长了 Graph
,那么它必须维持 Graph
的合同。因此,如果您需要降低方法的可见性(如您所说,在 Java 中是不可能的),则需要打破 Graph
对 DFA
的约定,因此,DFA
不应该是 Graph
的 child。
另一种说法是,由于 DFA
不能有 Node
,因此 DFA
不是 Graph
。
您的解决方案可能是 DFA
不再扩展 Graph
(也许您需要一个 IDFA
界面?)。在这种情况下,您的 DFA
class 可以保留一个 Graph
作为字段。
此外,考虑什么是确定性有限自动机,它不是图,它是可以用图表示的状态机。
我正在尝试编写一些与确定性有限自动机相关的算法。所以显而易见的开始是定义实体:DFA
、State
和 Edges
。然而,我虽然因为 DFA
是一种图表,我应该有基本的 classes Graph
、Node
和 Edge
每个实现 IGraph
, INode
和 IEdge
。然后 DFA
和 State
扩展 Graph
和 Node
.
所以 Graph
的精简代码是:
class Graph
{
//...
public void addNode(INode node)
{
//...
}
//...
}
现在 State
和 Node
之间的主要区别是 State
将属性 isFinalState
和 isStartingState
添加到 Node
。所以我希望通过 Graph
的 addNode()
方法将 State
对象添加到 DFA
而不是 Node
对象。
我认为我可以在 DFA
中覆盖并创建此方法 private
并定义了一个新方法 addState()
它将接受 State
对象。但是在 Java 中不允许降低派生 class 中父 class 成员的可见性。
那么在这种情况下遵循的标准解决方案/方法是什么。还是我认为这一切都错了?
如果我正确地理解了你的例子,你可以通过泛型来实现:
class Graph<T extends Node> {
public void addNode(T node) { ... }
}
class DFA extends Graph<State> {
@Override
public void addNode(State node) { ... }
}
如果您的 DFA
class 延长了 Graph
,那么它必须维持 Graph
的合同。因此,如果您需要降低方法的可见性(如您所说,在 Java 中是不可能的),则需要打破 Graph
对 DFA
的约定,因此,DFA
不应该是 Graph
的 child。
另一种说法是,由于 DFA
不能有 Node
,因此 DFA
不是 Graph
。
您的解决方案可能是 DFA
不再扩展 Graph
(也许您需要一个 IDFA
界面?)。在这种情况下,您的 DFA
class 可以保留一个 Graph
作为字段。
此外,考虑什么是确定性有限自动机,它不是图,它是可以用图表示的状态机。