我開始學習Scala編程和OOP編程。 我不明白抽象類的概念。我讀過這個例子:在Scala中實現抽象類
考慮用兩個操作,incl和contains編寫一組整數的類的任務。 (s包括x)應該返回一個新的集合,其中包含元素x以及集合s的所有元素。 (s包含x)應該返回true,如果集合s包含元素x,否則應該返回false。這種組中的接口爲:
abstract class IntSet {
def incl(x: Int): IntSet
def contains(x: Int): Boolean
}
比方說,我們計劃實行套爲二叉樹。有兩種可能的樹木形式。空集的樹,以及由整數和兩個子樹組成的樹。這是他們的實現。
class EmptySet extends IntSet {
def contains(x: Int): Boolean = false
def incl(x: Int): IntSet = new NonEmptySet(x, new EmptySet, new EmptySet)
}
class NonEmptySet(elem: Int, left: IntSet, right: IntSet) extends IntSet {
def contains(x: Int): Boolean =
if (x < elem) left contains x
else if (x > elem) right contains x else true
def incl(x: Int): IntSet =
if (x < elem) new NonEmptySet(elem, left incl x, right)
else if (x > elem) new NonEmptySet(elem, left, right incl x)
else this
}
兩個EmptySet和NonEmptySet延伸類INTSET。這意味着EmptySet和NonEmptySet類型符合IntSet類型 - 只要需要IntSet類型的值,就可以使用EmptySet或NonEmptySet類型的值。
我不清楚爲什麼有用介紹匿名類,因爲在擴展匿名類的兩個類中還有incl和contains的定義。
謝謝!
我無法理解遞歸如何在incl方法中工作。請幫忙 – 2017-04-02 09:26:25