/ / Scala trait et héritage de classe arbre - scala, héritage, traits

Trait de scala et arbre d'héritage de classe - scala, héritage, traits

J'ai du mal à comprendre le résultat de mon programme. Je ne suis pas sûr de savoir pourquoi je reçois le résultat que je fais. Voici les classes / traits impliqués

class SuperClass {

def superMethodFromClass() = {println("from super class")};

}

trait SuperTrait extends SuperClass{

def superMethod():Unit={}
override def superMethodFromClass() = {println("from super trait")};

}

class TestClass extends SuperClass with SuperTrait{

def callSMFC() = superMethodFromClass()

}

Lorsque j'utilise le code suivant dans la méthode principale: -

val testClass = new TestClass
testClass.callSMFC

il imprime "de super trait"

Quelqu'un peut-il s'il vous plaît expliquer pourquoi cela se produit ???

Merci,

Amar

Réponses:

0 pour la réponse № 1

Le compilateur scala utilise la linéarisation pour combiner (plusieurs traits) en classes.

Vous pouvez voir votre exemple de plusieurs choses empilées les unes sur les autres. Votre TestClass hérite de SuperClass et alors SuperTrait est empilé sur le dessus.

En appelant superMethodFromClass(), le premier endroit à rechercher une implémentation est le TestClass lui-même cependant TestClass n'a pas remplacé la méthode, le compilateur va chercher en premier dans SuperTraitdonc tu vois que "from super trait" est imprimé.

Pour plus de détails, consultez le lien ci-dessous concernant le modèle de trait empilable. https://code.sahebmotiani.com/patterns-in-scala-101-5d0fa70aaf3f