當前位置:首頁 » 編程語言 » javascala

javascala

發布時間: 2025-05-22 17:34:19

㈠ scala和java的區別

兩者之間的區別,首先是功能運作程度不同,其次是插件不同。

㈡ scala trait 介面java怎麼使用

今天說一說Java中的介面和Scala中的trait。一直就把特質當做半個介面用,因為確實挺像的,但仔細看,還是有很大區別的。

1.介面不會有構造器,特質可以有構造器,並且在實現類繼承特質的時候,先要調用特質的構造器。
trait構造器的調用順序小結:
class B{}
trait C extends E{}
trait D extends E{}
A extends B with C with D
(1)先調用父類構造器B
(2)繼承多個trait從從左至右依次執行,先調用父trait E構造器,再調用C,再調用D構造器
(3)如果多個trait繼承同一個父trait,則父trait只執行一次
(4)所有父類構造器和trait構造器執行完畢之後再執行自己的構造器A
2.介面中不能有未初始化的屬性,且屬性的修飾都是public static final,特質中可以有未初始化的屬性變數,即抽象欄位;
未初始化的屬性可以有提前定義的特性,有兩種方法,例如:
trait A{
val name:String//抽象欄位
println("name: "+name)//特質中構造器執行的語句
}
class B extends A{
val name:String = "張三"
}
此時如果在main函數中new B的話,肯定會報錯,因為new B必然先會調用特質中的構造器,而name並沒有被賦值,所以會報錯。有三種方法解決:
(1)class B extends {
val name:String = "張三" //提前定義在類前
} with A{}
(2)class B{}
main函數中new B的時候:
val b = new {
val name:String = "張三"//提前定義在new對象前
} with B with A
(3)利用lazy特性
trait A{
lazy val name:String = null
println("name: "+name)
}
class B extends A{
override lazy val name:String = "張三"
}

熱點內容
oraclesql判斷 發布:2025-05-22 21:00:24 瀏覽:444
未裝存儲卡 發布:2025-05-22 20:59:38 瀏覽:159
如何識破密碼電子秤 發布:2025-05-22 20:55:06 瀏覽:969
c語言編譯apk 發布:2025-05-22 20:25:26 瀏覽:967
centos解壓targz 發布:2025-05-22 20:21:47 瀏覽:502
路由器的默認密碼多少 發布:2025-05-22 20:02:00 瀏覽:649
ppt上傳網站 發布:2025-05-22 19:49:02 瀏覽:639
我的世界頭顱伺服器 發布:2025-05-22 19:43:59 瀏覽:868
秦plusdmi哪個配置適合跑網約車 發布:2025-05-22 19:38:18 瀏覽:865
iphone版wifi密碼查看密碼是什麼 發布:2025-05-22 19:36:39 瀏覽:619