Consider the following example of traits:
trait TextileEngineer extends Engineer {
override def nameIt = {println("TextileEngineer"); super.nameIt;}
}
trait FabricEngineer extends Engineer {
override def nameIt = {println("FabricEngineer"); super.nameIt;}
}
trait Engineer extends Person {
override def nameIt = {println("Engineer"); super.nameIt;}
}
trait ClothMaker extends Trader {
override def nameIt = {println("ClothMaker"); super.nameIt;}
}
trait Trader {
def nameIt = println("Trader");
}
trait Parent extends Person with Human {
override def nameIt = {println("Parent"); super.nameIt;}
}
trait Person extends Human {
override def nameIt = {println("Person"); super.nameIt;}
}
trait Human {
def nameIt = {println("Human");}
}
object Linear extends App {
val data = new TheSmiths {}
data.nameIt
}
trait TheSmiths extends FabricEngineer with TextileEngineer with ClothMaker with Parent {
override def nameIt: Unit = super[TextileEngineer].nameIt //-----------override:1
override def nameIt: Unit = super[FabricEngineer].nameIt //------------override:2
override def nameIt: Unit = super.nameIt //------------override:3
}
- when in the final trait - the override:1 is used - the output is -
TextileEngineer
FabricEngineer
Engineer
Person
Human
- but when override:2 is used - the answer is -
FabricEngineer
Engineer
Person
Human
- But when the override:3 is used - the answer is - Why is the hierarchy not followed upto the
Humanwhen the traitParentis the part of other hierarchy?
Parent
ClothMaker
Trader