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 № 1Der 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 SuperTrait
deshalb 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