このScalaチュートリアルは私を混乱させます。抽象型は、Node
ポリモーフィズムの従来の規則に従っていないようです...
type Node <: NodeIntf // NodeIntf is assignable to Node.
abstract class NodeIntf {
def connectWith(node: Node): Edge
}
class NodeImpl extends NodeIntf {
def connectWith(node: Node): Edge = {
val edge = newEdge(this, node) // NodeImpl (this) is assignable to NodeIntf.
edges = edge :: edges
edge
}
}
protected def newEdge(from: Node, to: Node): Edge
Node = NodeIntf
との場合NodeIntf = NodeImpl
、なぜできないのですNode = NodeImpl
か?どうやら上記のコードはコンパイルされないので、私は尋ねます-なぜ「自己型参照」を使用する必要があるのですか?(チュートリアルを参照)