1. 程式人生 > >Scala學習第九天 Scala的內部類實戰詳解

Scala學習第九天 Scala的內部類實戰詳解

資訊來源於 DT大資料夢工廠微信公眾賬號:DT_Spark
DT大資料夢工廠群號:302306504王家林老師微訊號:wangjialinandroid

1、Scala內部類
與Java的內部類有很大不同,Java的內部類其實是從屬於外部類,而Scala的內部類是從屬於物件的。這可以從下面的例項看出:

class Outer(val name : String) { outer=>
    class Inner(val name : String){
      //foo方法傳遞的是Inner型別的引數
      def foo(b : Inner) = println(" Outer: "
+ outer.name + " Innner: " + b.name) } } object OOPInScala{ def main(args: Array[String]){ //構建2個外部類,以"Spark"、"Hadoop"引數傳入; val outer1=new Outer("Spark") val outer2=new Outer("Hadoop") val inner1=new outer1.Inner("Scala") val inner2=new outer2.Inner("Java"
) inner1.foo(inner1) inner2.foo(inner2) } } /*Val的name是外部類outer的成員,在外部類又定義了一個內部類Inner,同樣,Val的name是內部類Inner的成員*/ /*當內部類要訪問外部類的話,這個時候,可以給外部類指定一個名稱, 如上圖的outer*/

內部類,Scala與Java的不同:
1)構建內部類的語法是new outer1.Inner(“Scala”),因為內部類是從屬於外部類的物件,而在Java中,是outer.new Inner(“Scala”).
為什麼Scala這麼設計呢?舉個簡單的場景,比如network中,每個network有自己的成員,不同的社交網路比如”twwiter”,”facebook”,顯然,當我們要訪問facebook的成員,用new facebook的例項去訪問內部的成員更自然。
Scala 深入淺出實戰經典(1-64講)完整視訊、PPT、程式碼下載: