我认为我对Scala中继承的理解存在一些缺陷。
为什么将一个元素追加到我自己定义的类test
会返回scala.collection.immutable.HashSet[String]
的实例而不是test
的实例?
scala> class test extends scala.collection.immutable.HashSet[String]
defined class test
scala> var hashSet: test = new test
hashSet: test = Set()
scala> val set2 = hashSet + "1234"
set2: scala.collection.immutable.HashSet[String] = Set(1234)
答案 0 :(得分:3)
+
中定义的immutable.HashSet[A]
方法返回immutable.HashSet[A]
,如scaladoc所示。扩展HashSet
时,您将继承其所有公共方法。 HashSet
对您的扩展课程一无所知。让+
返回自己的类型的唯一方法是override
方法,并将返回类型缩小到你的范围 - 这不是一项简单的任务。