真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Scala調用超類構造器和override修飾符的使用方法

這篇文章主要講解了“Scala調用超類構造器和override修飾符的使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Scala調用超類構造器和override修飾符的使用方法”吧!

創(chuàng)新互聯(lián)是一家專注于成都網站設計、成都網站建設與策劃設計,皋蘭網站建設哪家好?創(chuàng)新互聯(lián)做網站,專注于網站建設十余年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:皋蘭等地區(qū)。皋蘭做網站價格咨詢:13518219792

調用超類構造器

現(xiàn)在你有了兩個類組成的完整系統(tǒng):抽象類Element,和擴展它的具體類ArrayElement?;蛟S你還在設想其它表達元素的方式。比方說,客戶或許想要創(chuàng)造由給定單行字串構成的布局元素。面向對象編程讓使用新數(shù)據(jù)變體擴展系統(tǒng)變得容易。只要加入子類即可。例如,代碼10.6展示了擴展ArrayElement的LineElement類:

class LineElement(s: String) extends ArrayElement(Array(s)) {   override def width = s.length   override def height = 1 }

代碼 10.6 調用超類構造器

由于LineElement擴展了ArrayElement,并且ArrayElement的構造器帶一個參數(shù)(Array[String]),LineElement需要傳遞一個參數(shù)到它的超類的主構造器。要調用超類構造器,只要把你要傳遞的參數(shù)或參數(shù)列表放在超類名之后的括號里即可。例如,類LineElement傳遞了Array(s)到ArrayElement的主構造器,把它放在超類ArrayElement的名稱后面的括號里:

... extends ArrayElement(Array(s)) ...

有了新的子類,布局元素的繼承級別現(xiàn)在看起來就像展示在圖釋10.2中的那樣了。

 Scala調用超類構造器和override修飾符的使用方法

圖釋 10.2 LineElement的類關系圖

使用override修飾符

請注意LineElement里width和height的定義帶著override修飾符。你在6.3節(jié)中的 toString方法中看到過。Scala里所有重載了父類具體成員的成員都需要這樣的修飾符。如果成員實現(xiàn)的是同名的抽象成員則這個修飾符是可選的。而如果成員并未重載或實現(xiàn)什么其它基類里的成員則禁用這個修飾符。由于類LineElement的height和width重載了類Element的具體成員定義,override是需要的。

這條規(guī)則給編譯器提供了有用的信息來幫助避免某些難以捕捉的錯誤并使得系統(tǒng)的改進更加安全。例如,如果你碰巧拼錯了方法名或偶爾傳遞給它不同的參數(shù)列表,編譯器會回應錯誤信息:

$ scalac LineElement.scala  .../LineElement.scala:50:  error: method hight overrides nothing  override def hight = 1 ?

系統(tǒng)改進的時候,override公約顯得更重要。假設你定義了一個2D畫圖方法庫。你把它公開,并廣泛使用。庫的下一個版本里你想在你的基類Shape里增加一個使用以下簽名的新方法:

def hidden(): Boolean

你的新方法將被用在許多畫圖方法中去決定是否需要把形狀畫出來。這或許會產生顯著的提速,但你不可以冒著破壞客戶代碼的風險做這件事。畢竟客戶說不定已經使用不同的hidden實現(xiàn)定義了Shape的子類。或許客戶的方法實際上是讓對象消失而不是檢測是否對象是隱藏的。因為這兩個版本的hidden互相重載,你的畫圖方法將停止對象的消失,這可真不是你想要的!這些“意外的重載”就是被稱為“脆基類”問題的最通常的表現(xiàn)。這個問題是指如果你添加了新的成員到類層級的基類中(通常我們稱為超類),你會有破壞客戶代碼的風險。

Scala不能完全解決脆基類問題,不過它與Java相比有所改善。Java1.5中,@Override標注被引入并與Scala的override修飾符起相同的工作,不過不像Scala的override,它不是必需的。如果畫圖庫和它的客戶是用Scala寫的,那么客戶的hidden原始實現(xiàn)就不會有override修飾符,因為這時候還沒有另外一個使用那個名字的方法。一旦你添加了hidden方法到你Shape類的第二個版本,客戶的重編譯將給出像下列這樣的錯誤:

.../Shapes.scala:6: error: error overriding method  hidden in class Shape of type ()Boolean;  method hidden needs 'override' modifier  def hidden(): Boolean =  ?

也就是說,代之以錯誤的執(zhí)行,你的客戶將得到一個編譯期錯誤,這常常是更可取的。

感謝各位的閱讀,以上就是“Scala調用超類構造器和override修飾符的使用方法”的內容了,經過本文的學習后,相信大家對Scala調用超類構造器和override修飾符的使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!


標題名稱:Scala調用超類構造器和override修飾符的使用方法
本文網址:http://weahome.cn/article/ghhggo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部