Scala 類

2022-05-13 15:04 更新

類是創(chuàng)建對象的藍圖,對象是類的具體實例。

類定義包括字段聲明和方法定義。

字段用于存儲對象的狀態(tài),方法可以提供對字段的訪問,并更改對象的狀態(tài)。

讓我們從創(chuàng)建Book對象的藍圖的一個簡單示例開始:

class Book

前面的Scala聲明對應于此Java聲明:

public class Book {
}

定義類后,您可以使用關鍵字new創(chuàng)建類中的對象。

要創(chuàng)建Book的實例,您可以鍵入以下內(nèi)容:

new Book

這同樣的效果,如下所示︰

new Book()

例子

以下代碼創(chuàng)建一個類來表示形狀。

我們定義了一個名為Shape的超類型,它有一個計算形狀面積的方法區(qū)域。

class Shape {
   def area:Double = 0.0
}

以下代碼為 Rectangle Circle 創(chuàng)建類。

class Rectangle(val width:Double,val height:Double) extends Shape {
   override def area:Double = width*height
}
class Circle(val radius:Double) extends Shape {
   override def area:Double = math.Pi*radius*radius
}

每個類都接受一些參數(shù)并擴展 Shape ,然后覆蓋 Shape 的方法。

子類型保證具有超類型的所有成員。

更改超類的方法的實現(xiàn)稱為覆蓋。

注意

我們不能改變 Rectangle 的寬度和高度以及 Circle 對象的半徑,因為如果該字段是一個val ,Scala只會生成一個getter方法。

這是封裝的示例。在封裝中,對象的字段只能通過其方法訪問。

我們可以編寫接受Shape實例的代碼,然后將其傳遞給RectangleCircle的實例:

def draw(s:Shape)

現(xiàn)在,考慮對這個函數(shù)的兩個調(diào)用,像這樣:

val circle = draw(new Circle(3))
val rectangle = draw(new Rectangle(2,3))

繼承保證任何我們可以在Shape實例上調(diào)用的方法都將在子類型中定義。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號