Je rencontre un comportement étrange par la gestion par Scala des constructeurs de super-classes.Scala: invocation du constructeur de la superclasse
J'ai une classe très simple définie de la manière
package server
class Content(identifier:String,content:String){
def getIdentifier() : String = {identifier}
def getContent() : String = {content}
}
et une sous-classe simple,
package server
class SubContent(identifier:String, content:String) extends Content(identifier, content+"XXX")){
override def getContent():String = {
println(content)
super.getContent
}
}
suivant
Ce qui est vraiment étrange est que dans la sous-classe il y a des doublons des attributs superclasse, donc si je crée un nouvel objet
var c = new SubContent("x","x")
l'exécution de
c.getContent
premières impressions sur « x » (La valeur fournie au constructeur de sous-classe), mais retourne « Xxxx » (La valeur fournie au constructeur superclasse).
Est-il possible d'éviter ce comportement? Fondamentalement ce que je voudrais avoir, c'est que la sous-classe ne crée pas ses propres attributs, mais passe simplement les paramètres à la superclasse.
Il ne s'agit pas d'une classe de cas, mais le problème persiste, notamment parce que 'content' est utilisé dans le corps de la sous-classe. –
Existe-t-il une autre façon de le définir pour éviter cela? Ou du moins, si je ne me réfère jamais aux paramètres des constructeurs de sous-classes, leurs champs seront alloués (Mémoire de gaspillage)? – mariosangiorgio
Utilisez 'super.content' au lieu de simplement' content' dans 'SubContent.getContent'. –