抽象类Scala中的私有构造函数?

抽象类Scala中的私有构造函数?,scala,abstract-class,Scala,Abstract Class,我知道抽象类不能被实例化,所以也许我在回答我自己的问题,但是有没有办法在抽象类中放置私有构造函数呢?我的问题是我有一个抽象类,它有两个子类,它们有完全相同的方法,有些方法是以相同的方式完成的,所以我想在抽象类中实现它们,但是它们返回类的一个成员,所以我想不出一种方法来返回我无法实例化的东西。我想返回这个(x),但我不知道如果抽象类没有构造函数,我是否可以返回 abstract class Storage { def +(other: Storage) : Storage = {

我知道抽象类不能被实例化,所以也许我在回答我自己的问题,但是有没有办法在抽象类中放置私有构造函数呢?我的问题是我有一个抽象类,它有两个子类,它们有完全相同的方法,有些方法是以相同的方式完成的,所以我想在抽象类中实现它们,但是它们返回类的一个成员,所以我想不出一种方法来返回我无法实例化的东西。我想返回这个(x),但我不知道如果抽象类没有构造函数,我是否可以返回

abstract class Storage {
    def +(other: Storage) : Storage = {
        var d=List()
        for (i<-other.length){
             d=this.element(i)+other.element(i)
        }    
        this(d) 
    }
}
抽象类存储{
def+(其他:存储):存储={
var d=List()

对于(i您正在寻找的是一些语言中名为“虚拟构造函数”的概念,如Delphi。Scala没有虚拟构造函数,但您可以使用虚拟工厂方法部分模拟它们,这对于您的用例来说已经足够了:

abstract class Storage {
  def newLikeThis(d: List[Elem]): Storage

  def +(other: Storage): Storage = {
    ...
    newLikeThis(d)
  }
}

class StorageA(d: List[Elem]) extends Storage {
  def newLikeThis(d: List[Elem]): StorageA =
    new StorageA(d)

  ...
}

// same for StorageB