W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在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ì)象。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: