{"id":5819,"date":"2020-12-29T08:37:06","date_gmt":"2020-12-29T08:37:06","guid":{"rendered":"https:\/\/prwatech.in\/blog\/?p=5819"},"modified":"2024-04-12T11:22:50","modified_gmt":"2024-04-12T11:22:50","slug":"trait-linearization-in-scala-introduction-to-traits-in-scala","status":"publish","type":"post","link":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/","title":{"rendered":"Scala &#8211; Traits"},"content":{"rendered":"\r\n<h2>Introduction to Traits in Scala<\/h2>\r\n<p>&nbsp;<\/p>\r\n<p><strong>Traits<\/strong> in <a href=\"https:\/\/prwatech.in\/blog\/scala\/scala-a-quick-overview\/\">Scala<\/a> is same as <strong>interfaces <\/strong>in Java. But <a href=\"http:\/\/scala-lang.org\">traits<\/a> are more powerful than the interface in Java because traits permits to allow members implementation. Traits can have methods(<strong>abstract <\/strong>and<strong> non-abstract <\/strong>both), and fields as its individuals.<\/p>\r\n\r\n\r\n\r\n<p><strong>use case 1:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>scala&gt; trait PrwatechIterator[X] {<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 def hasNext: Boolean<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 def next(): X<\/p>\r\n\r\n\r\n\r\n<p>\u00a0 \u00a0 \u00a0}<\/p>\r\n\r\n\r\n\r\n<p>trait PrwatechIterator<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; class IntIterator(to: Int) extends PrwatechIterator[Int] {<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 private var current = 1<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 override def hasNext: Boolean = current &lt; to<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 override def next(): Int = {<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 if (hasNext) {<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 val t = current<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0current += 2<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 t<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>class IntIterator<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; val iterator = new IntIterator(5)<\/p>\r\n\r\n\r\n\r\n<p>2scala&gt; iterator.next()<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; iterator.next()<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"455\" class=\"wp-image-8468\" src=\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png\" alt=\"\" srcset=\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png 549w, https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78-300x249.png 300w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/figure>\r\n\r\n\r\n\r\n<p><strong>use case 2:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>scala&gt; trait Prwatech {<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0 val name: String<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 | }<\/p>\r\n\r\n\r\n\r\n<p>trait Prwatech<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; class BigData(val name: String) extends Prwatech<\/p>\r\n\r\n\r\n\r\n<p>2scala&gt; class DataScience(val name: String) extends Prwatech<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; val DataScience = new DataScience(&#8220;MachineLearning&#8221;)<\/p>\r\n\r\n\r\n\r\n<p>3scala&gt; val BigData = new BigData(&#8220;Hadoop&#8221;)<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; val course = ArrayBuffer.empty[Prwatech<\/p>\r\n\r\n\r\n\r\n<p>4scala&gt; course.append(DataScience)<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; course.append(BigData)<\/p>\r\n\r\n\r\n\r\n<p>5scala&gt; course.foreach(Prwatech =&gt; println(Prwatech.name))<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"606\" height=\"441\" class=\"wp-image-8469\" src=\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-79.png\" alt=\"\" srcset=\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-79.png 606w, https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-79-300x218.png 300w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/figure>\r\n\r\n\r\n\r\n<p><strong>use case 3:<\/strong><\/p>\r\n\r\n\r\n\r\n<p>scala&gt; trait Prwatech {<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 |\u00a0\u00a0 val name: String<\/p>\r\n\r\n\r\n\r\n<p>\u00a0\u00a0\u00a0\u00a0 |<\/p>\r\n\r\n\r\n\r\n<p>trait Prwatech<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; class Linux(val name: String) extends Prwatech<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; class Python(val name: String) extends Prwatech<\/p>\r\n\r\n\r\n\r\n<p>2scala&gt; val Python = new Python(&#8220;Programming Language&#8221;)<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; val Linux = new Linux(&#8220;Operating System&#8221;)<\/p>\r\n\r\n\r\n\r\n<p>4scala&gt; val prwa = ArrayBuffer.empty[Prwatech]<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; prwa.append(Python)<\/p>\r\n\r\n\r\n\r\n<p>6scala&gt; prwa.append(Linux)<\/p>\r\n\r\n\r\n\r\n<p>scala&gt; prwa.foreach(Prwatech =&gt; println(Prwatech.name))<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"606\" height=\"465\" class=\"wp-image-8470\" src=\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-80.png\" alt=\"\" srcset=\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-80.png 606w, https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-80-300x230.png 300w\" sizes=\"auto, (max-width: 606px) 100vw, 606px\" \/><\/figure>\r\n<p>&nbsp;<\/p>\r\n<p>Introduction to Traits in Scala<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Introduction to Traits in Scala &nbsp; Traits in Scala is same as interfaces in Java. But traits are more powerful than the interface in Java because traits permits to allow members implementation. Traits can have methods(abstract and non-abstract both), and fields as its individuals. use case 1: scala&gt; trait PrwatechIterator[X] { \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 def hasNext: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[565,1698],"tags":[576,571,581,1164,1162,1160,1163,1165,1159,599],"class_list":["post-5819","post","type-post","status-publish","format-standard","hentry","category-scala","category-scala-modules-scala","tag-scala","tag-scala-programming-language","tag-scala-programs","tag-scala-trait-example","tag-scala-trait-usecases","tag-scala-traits","tag-trait-definition","tag-trait-definition-in-scala","tag-traits","tag-what-is-trait-in-scala"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introduction to Traits in Scala - Prwatech<\/title>\n<meta name=\"description\" content=\"Master Introduction to Traits in Scala - Dive deep with our expert instructors and comprehensive curriculum.\" \/>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduction to Traits in Scala - Prwatech\" \/>\n<meta property=\"og:description\" content=\"Master Introduction to Traits in Scala - Dive deep with our expert instructors and comprehensive curriculum.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/\" \/>\n<meta property=\"og:site_name\" content=\"Prwatech\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prwatech.in\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-29T08:37:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-12T11:22:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png\" \/>\n<meta name=\"author\" content=\"Prwatech\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Eduprwatech\" \/>\n<meta name=\"twitter:site\" content=\"@Eduprwatech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prwatech\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/\",\"url\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/\",\"name\":\"Introduction to Traits in Scala - Prwatech\",\"isPartOf\":{\"@id\":\"https:\/\/prwatech.in\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png\",\"datePublished\":\"2020-12-29T08:37:06+00:00\",\"dateModified\":\"2024-04-12T11:22:50+00:00\",\"author\":{\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3\"},\"description\":\"Master Introduction to Traits in Scala - Dive deep with our expert instructors and comprehensive curriculum.\",\"breadcrumb\":{\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#primaryimage\",\"url\":\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png\",\"contentUrl\":\"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png\",\"width\":549,\"height\":455},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/prwatech.in\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Scala &#8211; Traits\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/prwatech.in\/blog\/#website\",\"url\":\"https:\/\/prwatech.in\/blog\/\",\"name\":\"Prwatech\",\"description\":\"Share Ideas, Start Something Good.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/prwatech.in\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3\",\"name\":\"Prwatech\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g\",\"caption\":\"Prwatech\"},\"url\":\"https:\/\/prwatech.in\/blog\/author\/prwatech123\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introduction to Traits in Scala - Prwatech","description":"Master Introduction to Traits in Scala - Dive deep with our expert instructors and comprehensive curriculum.","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Introduction to Traits in Scala - Prwatech","og_description":"Master Introduction to Traits in Scala - Dive deep with our expert instructors and comprehensive curriculum.","og_url":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/","og_site_name":"Prwatech","article_publisher":"https:\/\/www.facebook.com\/prwatech.in\/","article_published_time":"2020-12-29T08:37:06+00:00","article_modified_time":"2024-04-12T11:22:50+00:00","og_image":[{"url":"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png","type":"","width":"","height":""}],"author":"Prwatech","twitter_card":"summary_large_image","twitter_creator":"@Eduprwatech","twitter_site":"@Eduprwatech","twitter_misc":{"Written by":"Prwatech","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/","url":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/","name":"Introduction to Traits in Scala - Prwatech","isPartOf":{"@id":"https:\/\/prwatech.in\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#primaryimage"},"image":{"@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#primaryimage"},"thumbnailUrl":"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png","datePublished":"2020-12-29T08:37:06+00:00","dateModified":"2024-04-12T11:22:50+00:00","author":{"@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3"},"description":"Master Introduction to Traits in Scala - Dive deep with our expert instructors and comprehensive curriculum.","breadcrumb":{"@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#primaryimage","url":"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png","contentUrl":"https:\/\/prwatech.in\/blog\/wp-content\/uploads\/2021\/04\/image-78.png","width":549,"height":455},{"@type":"BreadcrumbList","@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/trait-linearization-in-scala-introduction-to-traits-in-scala\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/prwatech.in\/blog\/"},{"@type":"ListItem","position":2,"name":"Scala &#8211; Traits"}]},{"@type":"WebSite","@id":"https:\/\/prwatech.in\/blog\/#website","url":"https:\/\/prwatech.in\/blog\/","name":"Prwatech","description":"Share Ideas, Start Something Good.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/prwatech.in\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3","name":"Prwatech","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g","caption":"Prwatech"},"url":"https:\/\/prwatech.in\/blog\/author\/prwatech123\/"}]}},"_links":{"self":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/5819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/comments?post=5819"}],"version-history":[{"count":9,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/5819\/revisions"}],"predecessor-version":[{"id":11392,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/5819\/revisions\/11392"}],"wp:attachment":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/media?parent=5819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/categories?post=5819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/tags?post=5819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}