Scala 伴生對(duì)象

2022-05-13 15:16 更新

在Scala中,類(lèi)和對(duì)象可以共享同一個(gè)名稱(chēng)。

當(dāng)一個(gè)對(duì)象與一個(gè)類(lèi)共享一個(gè)名稱(chēng)時(shí),它被稱(chēng)為伴生對(duì)象,并且該類(lèi)被稱(chēng)為伴生類(lèi)。

伴生對(duì)象是與另一個(gè)類(lèi)或特征共享相同名稱(chēng)和源文件的對(duì)象。

一個(gè)trait可以看作是一個(gè)Java接口。

這種方法允許我們?cè)陬?lèi)上創(chuàng)建靜態(tài)成員。

伴生對(duì)象對(duì)實(shí)現(xiàn)輔助方法和工廠很有用。

要實(shí)現(xiàn)一個(gè)創(chuàng)建不同類(lèi)型的形狀的工廠,我們可以在Scala中創(chuàng)建一個(gè)形狀工廠。

例子

我們使用一個(gè)伴生類(lèi)Shape和一個(gè)伴生對(duì)象Shape,作為一個(gè)工廠。

trait Shape {
    def area :Double
}
object Shape {
    private class Circle(radius: Double) extends Shape{
        override val area = 3.14*radius*radius
    }
    private class Rectangle (height: Double, length: Double)extends Shape{
        override val area = height * length
    }
    def apply(height :Double , length :Double ) : Shape = new Rectangle(height,length)
    def apply(radius :Double) : Shape = new Circle(radius)

}

object Main extends App {
    val circle = Shape(2)
    println(circle.area)
    val rectangle = Shape(2,3)
    println(rectangle.area)
}

注意

與伴生類(lèi)不共享相同名稱(chēng)的單例對(duì)象稱(chēng)為獨(dú)立對(duì)象。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)