Ho una classe astratta con un valore predefinito per il suo parametro. Non voglio dover riutilizzare il valore predefinito nel costruttore di tutte le possibili implementazioni.Parametro di default dell'ereditarietà Scala nella classe genitore
abstract class Place(val place: String = "World")
class Message(val message: String = "Hello", p: String) extends Place(p) {
override def toString = s"$message $place"
}
quello che voglio ottenere
new Message("Hi", "Universe") = "Hi Universe" // Ok
new Message("Hi") = "Hi World" // Doesn't work, second parameter is required
new Message() = "Hello World" // Doesn't work, second parameter is required
ho considerato utilizzando un costruttore ausiliario omettendo il secondo parametro, ma non aiuta in quanto non è possibile chiamare i costruttori di super al di fuori del costruttore principale.
Voglio sapere come si fa, o perché non è possibile. Non sto cercando una soluzione alternativa, come non usare l'ereditarietà.
opere. non come incapsulato. Qui hai 3 oggetti da manipolare (oggetto, astratto e classe). In particolare non dare credito per oggetto e astratto con lo stesso nome. class Message deve conoscere l'oggetto Place, quindi l'utilizzo di questo richiede più cablaggi, se questo ha senso. l'astratto e il concreto dovrebbero gestire tutto. – Drew