Во-первых, не беспокойтесь о производительности, если только вы не докажете, что производительность этого кода важна для общей производительности: «Преждевременная оптимизация - корень всех зол»
Однако вы можете делать то, что хотитеперегружая getAllPrecursors
и помечая его устаревшим:
class graph {
def getAllPrecursors(n: Node): List[Node] = ...
}
class tree extends graph {
def getParent(n: Node) = ...
@deprecated("Use getParent rather that getAllPrecursors", "1.0")
override def getAllPrecursors(n: Node) = List(getParent(n))
}
Это выдаст предупреждение об устаревании, если вы используете getAllPrecursors
для значения типа tree
, но не для значения типа graph
(даже если это значение на самом деле является экземпляром tree
)
Что касается проектирования, было бы лучше иметь getAllPrecursors
и getParent
в качестве методов на Node
(и TreeNode
), а не на самом графике.