РЕДАКТИРОВАТЬ - это вопрос из списка рассылки scala, который, как мне показалось, был продублирован здесь. Мой ответ касается предоставления трех разных конструкторов (то есть репликации дизайна Java), а не расширения класса
Предполагая, что каждый из ваших конструкторов в конечном итоге создает состояние S
объекта, создайте сопутствующий объект со "статическими" методами для создания этого состояния
object Base {
private def stateFrom(d : Double) : S = error("TODO")
private def stateFrom(s : Str) : S = error("TODO")
private def stateFrom(i : Int) : S = error("TODO")
}
Затем создайте приватный конструктор, принимающий состояние и (публичные) перегруженные конструкторы, которые передаются первичному конструктору
import Base._
class Base private(s : S) { //private constructor takes the state
def this(d : Double) = this(stateFrom(d))
def this(str : String) = this(stateFrom(str))
def this(i : Int) = this(stateFrom(i))
//etc
}