Ich habe eine abstrakte Klasse mit einem Standardwert für seinen Parameter. Ich möchte nicht den Standardwert im Konstruktor aller möglichen Implementierungen verwenden müssen.Scala Vererbung Standardparameter in der übergeordneten Klasse
abstract class Place(val place: String = "World")
class Message(val message: String = "Hello", p: String) extends Place(p) {
override def toString = s"$message $place"
}
Was will ich
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
hielt ich bekommen einen Hilfs Konstruktor mit dem zweiten Parameter weggelassen, aber es hilft nicht, da Sie nicht super Bauer außerhalb des Haupt Konstruktor aufrufen können.
Ich möchte wissen, wie es geht, oder warum es nicht möglich ist. Ich bin nicht auf der Suche nach einer Problemumgehung, wie keine Vererbung verwenden.
funktioniert. nicht so gekapselt. Hier haben Sie 3 Objekte zum Jonglieren (Objekt, Abstract und Klasse). Insbesondere keine Gutschrift für Objekt und Abstrakt mit gleichem Namen. Klasse Nachricht muss über Objekt Ort wissen, so dass die Verwendung mehr Verdrahtung benötigt, wenn das Sinn macht. das Abstrakte und Konkrete sollte mit allem umgehen. – Drew