scala中的接口——trait

scala中的接口

沒有接口,採用trait(特徵)來代替接口的概念,類似於java中的 interface+abstract class, scala中稱爲類 混入/繼承 了特質

特質 trait

– 可以類比java中的接口,但是又和接口非常不一樣

定義特質

		trait xxx{
			def m1()
			def m2(){....}
}

和java中的接口不同 scala中的特質可以包含具有方法體的方法(java8也可以在接口中定義具有方法體的方法)

和抽象類不同的地方在於 scala的類只能單繼承 但是可以多混入 利用這種方式可以實現類似c語言中多繼承的特性

特質的兩種使用方式

混入特質 with,被實現的方式不具有傳遞性

繼承特質 extends,使方法具有了傳遞性

如果類沒有明確繼承父類,即extends關鍵字沒有被佔用 就可以使用extends 但是如已經使用了extends繼承了父類 再向混入特質就要用 with關鍵字了 一個類的聲明中只能有一個 extends 但是可以有多個with

繼承和特質的區別不在於技術上而在於邏輯上

繼承的目的——爲了符合繼承結構樹,表明它是啥;

實現特質的目的——爲了混入某些特性

		trait Run{
			def run()
			def run(length:Long){
			}
		}
		trait Eat{
			def eat()
		}

		trait Sleep{
			def sleep()
		}
		class Demo10 extends Run with Eat with Sleep {
			def run(): Unit = {
			}

			def eat(): Unit = {
			}

			def sleep(): Unit = {
			}
		}

發佈了23 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章