當前位置:編程學習大全網 - 源碼下載 - scala class和object,trait的區別

scala class和object,trait的區別

object

在scala中沒有靜態方法和靜態字段,所以在scala中可以用object來實現這些功能,直接用對象名調用的方法都是采用這種實現方式,例如Array.toString。對象的構造器在第壹次使用的時候會被調用,如果壹個對象從未被使用,那麽他的構造器也不會被執行;對象本質上擁有類(scala中)的所有特性,除此之外,object還可以壹擴展類以及壹個或者多個特質:例如,

abstract class ClassName(val parameter){}

object Test extends ClassName(val parameter){}

trait TraitA{}

trait TraitB{}

trait TraitC{}

object Test1 extends TraitA with TraitB with TraitC{}

註意:object不能提供構造器參數,也就是說object必須是無參的

我們通常會定義和使用object的apply方法,有如下情形,apply方法就會被調用,Object(參數1 ,參數2 ,……)這樣是隱含的調用apply方法,當然也可以顯示的調用,如下Array("Mary","tong"),當然也可以這樣來寫Array.apply("Mary","tong"),壹般我們提倡隱式的寫法。

所有的main方法都必須在object中被調用,來提供程序的主入口,十分簡單,不舉例說明,處理main方法以外,scala中還提供了擴展App特質,然後將程序代碼放入都早起方法體內,如

object Hello extends App{

println("Hello World !!!")

}

這樣的代碼可以直接執行,輸出

如果需要命令行參數,可以直接調用args屬性來得到,例如

def main(args: Array[String]) { if (args.length > 0 ) println("Hello " + args(0)) else

println("Hello World")

}scala中並沒有枚舉類型,但是,標準類庫中提供了壹個枚舉類型的接口,在object下面,可以擴展出枚舉類型(Enumeration),

具體示例如下:object EnumerationDemo extends Enumeration{ val red, green, blue, pink = Value

val black = Value // 上面壹條語句是簡寫

val white = Value

val gray = Value

val yellow = Value(12, "huang") //可以隨意指定id和名稱,但是避免重復

val purple = Value("zi") //id為13

val orange = Value(20)

}

上面的代碼為實現枚舉類型的具體代碼,如果不指定id和name,系統默認是id從0開始,name就是變量的名稱,可以指定其中的

任何壹個或者是兩個全部指定,已經指定的就按指定的初始化,並且後面的依次遞增。

枚舉的引用

可以直接objectName.red這樣來進行引用,也可以將import objectName._來進行導入引用,還可以給枚舉類型增加壹個類型別名,

具體如下:

object EnumerationDemo extends Enumeration{ type EnumerationDemo = Value val red, green, blue, pink = Value

val black = Value

val white = Value

val gray = Value

val yellow = Value(12, "huang") val purple = Value("zi") val orange = Value(20)

}

現在枚舉類型變成了EnumerationDemo.EnumerationDemo 這種用法只有在使用import語句的時候才顯得有意義。

package enumerationimport EnumerationDemo._/** * Created by tongtong on 2015/9/8. *

*/class EnumDemo { def transportation(color:Enumeration): Unit ={ if (color == red) "Stop" else if (color == green) "go" else if (color == yellow) "wait" }

}

枚舉類型也可以通過for循環將所有元素輸出,同時可以通過Enumeration(Int)和Enumeration.withName("")來進行定位操作

class

在scala中,類名可以和對象名為同壹個名字,該對象稱為該類的伴生對象,類和伴生對象可以相互訪問他們的私有屬性,但是

他們必須在同壹個源文件內。類只會被編譯,不能直接被執行,類的申明和主構造器在壹起被申明,在壹個類中,主構造器只有壹個,

所有必須在內部申明主構造器或者是其他申明主構造器的輔構造器,主構造器會執行類定義中的所有語句。scala對每個字段都會提供

getter和setter方法,同時也可以顯示的申明,但是針對val類型,只提供getter方法,默認情況下,字段為公有類型,可以在setter方法中增加限制條件來限定變量的變化範圍,在scala中方法可以訪問改類所有對象的私有字段

  • 上一篇:Java 給Excel添加數字簽名 Excel VBA使用數字簽名
  • 下一篇:驗證牛頓第二定律實驗的註意事項和易錯點
  • copyright 2024編程學習大全網