В данной статье мы рассмотрим трейты (traits) в Scala.
Трейт – это сущность, которая инкапсулирует поля или методы, которые потом могут быть использованы для вставки в другие классы. Данный механизм помогает нам обходить отсутствие множественного наследования в Scala – мы можем использовать любое количество трейтов в классе.
Для понимания того, как это работает на практике, рассмотрим простой пример:
Создадим трейт BaseTrait
package net.proselyte.scalatutorial.traits
/**
* Simple trait that contains fields id and name.
*
* @author Eugene Suleimanov
*/
trait BaseTrait {
def isScalaDeveloper (x: String): Boolean = x.equals("Scala Developer");
}
Используем данный трейт в классе Developer
package net.proselyte.scalatutorial.traits
/**
* Simple Scala class that represents Developer and extends BaseTrait.
*
* @author Eugene Suleimanov
*/
class Developer(sSpecialty: String) extends BaseTrait {
var specialty:String = sSpecialty;
}
И выполним следующую программу:
package net.proselyte.scalatutorial.traits
/**
* Simple Scala class that demonstrates class Developer in action.
*
* @author Eugene Suleimanov
*/
object DeveloperDemo {
def main(args: Array[String]) {
val scalaDeveloper = new Developer("Scala Developer");
val javaDeveloper = new Developer("Java Developer");
println(scalaDeveloper.isScalaDeveloper(scalaDeveloper.specialty));
println(javaDeveloper.isScalaDeveloper(javaDeveloper.specialty));
}
}
В результате выполнения данной программы мы получим следующий вывод в консоль:
true
false
Process finished with exit code 0
В данном примере мы импортировали метод isScalaDeveloper из трейта BaseTrait.
На этом мы заканчиваем изучение трейтов в Scala.
В следующей статье мы рассмотрим совпадение шаблонов в данном языке программирования.