天天看點

Scala(6)----class與object關鍵字詳解

class

類的定義

class Person(gender: String) {
  //輔構造函數
  def this() = this("woman")
  var name = ""

  override def toString(): String = s"$name 's gender = $gender"
}
           

類的定義中可以有多個構造參數。 Scala中隻有一個主要構造函數,其他都是輔助構造函數。輔助構造函數必須調用主構造函數。

主構造函數需要傳入性别,輔助構造函數預設将性别設定為woman

Scala(6)----class與object關鍵字詳解

在Scala中,類并不用聲明為public類型的。

Scala源檔案中可以包含多個類,所有這些類都具有共有可見性。

class定義的類可以繼承,繼承後子類可以調用父類的非私有方法和屬性

定義一個類,這個類可以定義但不能運作main方法

這個類隻是一個抽象,不能直接調用,需要new一個執行個體出來

Scala(6)----class與object關鍵字詳解

object

object的定義

object Person {
  val age = 12
  def eat(){println("吃東西")}
}
           

Scala單例對象是十分重要的,沒有像在Java一樣,有靜态類、靜态成員、靜态方法,但是Scala提供了object對象,這個object對象類似于Java的靜态類,它的成員、它的方法都預設是靜态的。

Scala它使用單例對象。單例是一種隻能有一個執行個體的對象。使用object關鍵字對象而不是類關鍵字建立單例。由于無法執行個體化單例對象,是以無法将參數傳遞給主構造函數。

Scala(6)----class與object關鍵字詳解

object的main方法

在scala中,如果要運作一個應用程式,那麼必須有一個main方法,作為入口

scala中main方法定義為def main(args: Array[String]), 并且必須定義在object中

Scala(6)----class與object關鍵字詳解

還有第二種可以運作程式的方式 繼承App類

Scala(6)----class與object關鍵字詳解

也可以運作程式

伴生對象

提到class和object就不得不提伴生對象,當一個類和一個靜态對象的名字一樣的時候,可以說這個對象是這個類的伴生對象 ,這個類是這個對象的伴生類。

Scala(6)----class與object關鍵字詳解

伴生類和伴生對象必須存放在一個.scala檔案中

伴生類和伴生對象最大的特點在于,可以互相通路Private field

Scala(6)----class與object關鍵字詳解

伴生對象特有的方法:apply。

可以通過伴生對象 更直接簡單的建立執行個體

通常在伴生對象中實作apply方法,并在其中實作構造伴生類對象的功能;這樣在建立伴生類對象時,可以使用Class()方式(而不僅僅是new Class方式),原理是隐式地調用了伴生對象的apply方法,讓對象建立更加簡潔。

Scala(6)----class與object關鍵字詳解

應用

Scala(6)----class與object關鍵字詳解