ヤクシェーバーの回答を受け入れていないこともあり、あなたの質問はまだ完全には回答されていないと思います。その答えは、これを行うことを示唆しています:
abstract class Car(private val model: String = "no name")
class Mazda(model: String = "no name") extends Car(model)
このシナリオでは、呼び出すとnew Mazda
、必要な結果が得られます。しかし、魔法の文字列"no name"
が 2 つの異なる場所で発生するため、完全に満足できるものではありません。Car
コンストラクター内から引数なしでコンストラクターを呼び出す方法を考え出すことができればと思うかもしれMazda
ません。おそらく次のようなものです。
// does not compile!
class Mazda(model: String) extends Car(model) {
def this() { super() } // attempt at an auxiliary constructor
}
残念ながら、補助コンストラクターは最終的にクラスのプライマリ コンストラクターを直接的または間接的に呼び出す必要があります。model
したがって、場合によっては a の構築のためにを指定できるようにしたい場合、引数なしMazda
でコンストラクターを呼び出す方法はありません。Car
魔法の文字列の重複を避けたい場合は、"no name"
どこかの定数に引き抜くのが最善の方法です。たとえば、次のようにします。
object Car {
val DefaultCarModel = "no name"
}
abstract class Car(private val model: String = DefaultCarModel)
class Mazda(model: String = DefaultCarModel) extends Car(model)