/ / Scala Merkmal und Klasse Erbschaft Baum - Scala, Vererbung, Merkmale

Scala-Merkmal und Klassenerbentitätsbaum - Scala, Vererbung, Merkmale

Ich habe Probleme, die Ausgabe meines Programms zu verstehen. Ich bin mir nicht sicher, warum ich die Ausgabe bekomme, die ich mache. Im Folgenden sind die beteiligten Klassen / Merkmale

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()

}

Wenn ich den folgenden Code in der Hauptmethode verwende: -

val testClass = new TestClass
testClass.callSMFC

es druckt "von super Merkmal"

Kann jemand bitte erklären, warum das passiert ???

Vielen Dank,

Amar

Antworten:

0 für die Antwort № 1

Der Scala-Compiler verwendet Linearisierung, um (mehrere Merkmale) in Klassen zu kombinieren.

Du könntest dein Beispiel sehen, wie mehrere Dinge übereinander gestapelt werden. Ihre TestClass erbt von SuperClass und dann SuperTrait ist oben gestapelt.

Beim Anrufen superMethodFromClass(), der erste Ort, um nach einer Implementierung zu suchen, ist die TestClass selbst aber seither TestClass hat die Methode nicht überschrieben, der Compiler wird zuerst nachsehen SuperTraitdeshalb siehst du das "from super trait" ist gedruckt.

Weitere Informationen finden Sie im folgenden Link zum stapelbaren Merkmalsmuster https://code.sahebmotiani.com/patterns-in-scala-101-5d0fa70aaf3f