I don't think your question has been fully answered yet, partly because you haven't accepted yakshaver's answer. That answer suggests you do this:
abstract class Car(private val model: String = "no name")
class Mazda(model: String = "no name") extends Car(model)
In this scenario, calling new Mazda gives you the result you want. But it is not entirely satisfying, since the magic string "no name" occurs in two different places. You might hope that you could work out a way to call the Car constructor with no arguments from inside the Mazda constructor, maybe something like this:
// does not compile!
class Mazda(model: String) extends Car(model) {
def this() { super() } // attempt at an auxiliary constructor
}
Unfortunately, any auxiliary constructor has to end up calling, either directly or indirectly, the primary constructor for the class. So if you want to be able to specify the model in some cases for the construction of a Mazda, there is no way that you can sometimes call the Car constructor with no arguments.
If you want to avoid the duplication of the magic "no name" string, the best thing to do is to pull it out into a constant somewhere. E.g., like this:
object Car {
val DefaultCarModel = "no name"
}
abstract class Car(private val model: String = DefaultCarModel)
class Mazda(model: String = DefaultCarModel) extends Car(model)