为什么Child实例上的操作返回父类型的实例?

时间:2015-09-01 02:16:40

标签: scala inheritance

我认为我对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)

1 个答案:

答案 0 :(得分:3)

+中定义的immutable.HashSet[A]方法返回immutable.HashSet[A],如scaladoc所示。扩展HashSet时,您将继承其所有公共方法。 HashSet对您的扩展课程一无所知。让+返回自己的类型的唯一方法是override方法,并将返回类型缩小到你的范围 - 这不是一项简单的任务。