Scala 類

2022-05-13 15:04 更新

類是創(chuàng)建對(duì)象的藍(lán)圖,對(duì)象是類的具體實(shí)例。

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

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

讓我們從創(chuàng)建Book對(duì)象的藍(lán)圖的一個(gè)簡單示例開始:

class Book

前面的Scala聲明對(duì)應(yīng)于此Java聲明:

public class Book {
}

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

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

new Book

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

new Book()

例子

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

我們定義了一個(gè)名為Shape的超類型,它有一個(gè)計(jì)算形狀面積的方法區(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
}

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

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

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

注意

我們不能改變 Rectangle 的寬度和高度以及 Circle 對(duì)象的半徑,因?yàn)槿绻撟侄问且粋€(gè)val ,Scala只會(huì)生成一個(gè)getter方法。

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

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

def draw(s:Shape)

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)