日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala基础教程(七):类和对象、特征

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala基础教程(七):类和对象、特征 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

擴展一個類:

可以擴展scala類以類似的方式,如在Java中的一樣,但有兩個限制:方法重載需要override關鍵字,只有主構造可以傳遞參數給基構造。現在擴展上面的類,并增加一個類的方法:

class Yiibai(val xc: Int, val yc: Int) { ?? var x: Int = xc ?? var y: Int = yc ?? def move(dx: Int, dy: Int) { ????? x = x + dx ????? y = y + dy ????? println ("Yiibai x location : " + x); ????? println ("Yiibai y location : " + y); ?? } } ? class Location(override val xc: Int, override val yc: Int, ?? val zc :Int) extends Yiibai(xc, yc){ ?? var z: Int = zc ? ?? def move(dx: Int, dy: Int, dz: Int) { ????? x = x + dx ????? y = y + dy ????? z = z + dz ????? println ("Yiibai x location : " + x); ????? println ("Yiibai y location : " + y); ????? println ("Yiibai z location : " + z); ?? } }

extends子句有兩種作用:它使類Location繼承類Yiibai所有非私有成員,它使Location類 作為Yiibai類的子類。?因此,這里的Yiibai類稱為超類,而Location類被稱為子類。擴展一個類,繼承父類的所有功能,被稱為繼承,但 scala允許繼承,只能從一個唯一的類。讓我們看看完整的例子,顯示繼承的用法:

import java.io._ ? class Yiibai(val xc: Int, val yc: Int) { ?? var x: Int = xc ?? var y: Int = yc ?? def move(dx: Int, dy: Int) { ????? x = x + dx ????? y = y + dy ????? println ("Yiibai x location : " + x); ????? println ("Yiibai y location : " + y); ?? } } ? class Location(override val xc: Int, override val yc: Int, ?? val zc :Int) extends Yiibai(xc, yc){ ?? var z: Int = zc ? ?? def move(dx: Int, dy: Int, dz: Int) { ????? x = x + dx ????? y = y + dy ????? z = z + dz ????? println ("Yiibai x location : " + x); ????? println ("Yiibai y location : " + y); ????? println ("Yiibai z location : " + z); ?? } } ? object Test { ?? def main(args: Array[String]) { ????? val loc = new Location(10, 20, 15); ? ????? // Move to a new location ????? loc.move(10, 10, 5); ?? } }

需要注意的是方法move,不會覆蓋?move 方法相應的定義,因為它們是不同的定義(例如,前兩個參數,而后者則需要三個參數)。
讓我們編譯和運行上面的程序,這將產生以下結果:

C:/>scalac Test.scala C:/>scala Test Yiibai x location : 20 Yiibai y location : 30 Yiibai z location : 20 ? C:/>

單例對象:

Scala比Java更面向對象,因為在Scala中不能有靜態成員。相反,Scala有單例的對象。單例就是只能有一個實例,即,類的對象。可以使用關鍵字object代替class關鍵字,而不是創建單例。因為不能實例化一個單獨的對象,不能將參數傳遞給主構造。前面已經看到全部采用單一對象,調用 Scala的main方法的例子。以下是單例顯示的相同的例子:

import java.io._ ? class Yiibai(val xc: Int, val yc: Int) { ?? var x: Int = xc ?? var y: Int = yc ?? def move(dx: Int, dy: Int) { ????? x = x + dx ????? y = y + dy ?? } } ? object Test { ?? def main(args: Array[String]) { ????? val yiibai = new Yiibai(10, 20) ????? printYiibai ? ????? def printYiibai{ ???????? println ("Yiibai x location : " + yiibai.x); ???????? println ("Yiibai y location : " + yiibai.y); ????? } ?? } }

當上述代碼被編譯和執行時,它產生了以下結果:

C:/>scalac Test.scala C:/>scala Test Yiibai x location : 10 Yiibai y location : 20 ? C:/>

特性封裝方法和字段定義,然后可以通過將它們混合成類被重用。不同于類繼承,其中每個類都必須繼承只有一個父類,一類可以在任意數量特質混合。

特征用于通過指定支持的方法的簽名定義的對象類型。Scala中也允許部分實現特性但可能不具有構造參數。

一個特征定義看起來就像不同的是它使用關鍵字trait如下類定義:

trait Equal { ? def isEqual(x: Any): Boolean ? def isNotEqual(x: Any): Boolean = !isEqual(x) }

這種特質由兩個方法的isEqual和isNotEqual。這里,我們沒有給出任何實現的isEqual其中作為另一種方法有它的實現。擴展特性的子類可以給實施未實現的方法。因此,一個特點是非常相似Java的抽象類。下面是一個完整的例子來說明特性的概念:

trait Equal { ? def isEqual(x: Any): Boolean ? def isNotEqual(x: Any): Boolean = !isEqual(x) } ? class Yiibai(xc: Int, yc: Int) extends Equal { ? var x: Int = xc ? var y: Int = yc ? def isEqual(obj: Any) = ??? obj.isInstanceOf[Yiibai] && ??? obj.asInstanceOf[Yiibai].x == x } ? object Test { ?? def main(args: Array[String]) { ????? val p1 = new Yiibai(2, 3) ????? val p2 = new Yiibai(2, 4) ????? val p3 = new Yiibai(3, 3) ? ????? println(p1.isNotEqual(p2)) ????? println(p1.isNotEqual(p3)) ????? println(p1.isNotEqual(2)) ?? } }

當上述代碼被編譯和執行時,它產生了以下結果:

C:/>scalac Test.scala C:/>scala Test false true true ? C:/>

什么時候使用特性?

沒有嚴格的規定,但這里有一些指導原則需要考慮:

·????????如果行為不被重用,則要使它成為一個具體的類。它畢竟不是可重復使用的行為。

·????????如果它可能在多個不相關的類被重用,使它成為一個性狀。只有特性可混入的類層次結構的不同部分。

·????????如果想它從繼承Java代碼,使用抽象類。

·????????如果打算在已編譯的形式分發,而且希望外部組織編寫的類繼承它,可能會傾向于使用抽象類。

·????????如果效率是非常重要的,傾向于使用類。

?

?

模式匹配是Scala中第二個最廣泛使用的功能,經過函數值和閉包。Scala中大力支持模式匹配處理消息。

模式匹配包括替代的序列,每個開始使用關鍵字case。每個備選中包括模式和一個或多個表達式,如果模式匹配將被計算。一個箭頭符號=>分開的表達模式。這里是一個小例子,它展示了如何匹配一個整數值:

object Test { ?? def main(args: Array[String]) { ????? println(matchTest(3)) ? ?? } ?? def matchTest(x: Int): String = x match { ????? case 1 => "one" ????? case 2 => "two" ????? case _ => "many" ?? } }

當上述代碼被編譯和執行時,它產生了以下結果:

C:/>scalac Test.scala C:/>scala Test many ? C:/>

使用case語句塊定義一個函數,該函數映射整數字符串。匹配關鍵字提供應用函數(如模式匹配函數以上)為一個對象的一個方便的方法。下面是第二個示例,它匹配針對不同類型的模式值:

object Test { ?? def main(args: Array[String]) { ????? println(matchTest("two")) ????? println(matchTest("test")) ????? println(matchTest(1)) ? ?? } ?? def matchTest(x: Any): Any = x match { ????? case 1 => "one" ????? case "two" => 2 ????? case y: Int => "scala.Int" ????? case _ => "many" ?? } }

當上述代碼被編譯和執行時,它產生了以下結果:

C:/>scalac Test.scala C:/>scala Test 2 many one ? C:/>

第一個case ,如果 x 指的是整數值1. 如果x等于字符串“2”的第二case相匹配匹配。第三種case 是由一個輸入模式;它匹配針對任何整數,并結合選擇值xto整數類型的變量y。以下為文字相同的匹配... case 表達式用括號 {...} 另一種形式:

object Test { ?? def main(args: Array[String]) { ????? println(matchTest("two")) ????? println(matchTest("test")) ????? println(matchTest(1)) ? ?? } ?? def matchTest(x: Any){ ????? x match { ???????? case 1 => "one" ???????? case "two" => 2 ???????? case y: Int => "scala.Int" ???????? case _ => "many" ????? } ?? } }


from: http://www.yiibai.com/scala/scala_basic_syntax.html

總結

以上是生活随笔為你收集整理的Scala基础教程(七):类和对象、特征的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: h文在线观看 | 久久你懂的 | 天天射日日操 | 久久精品国产亚洲AV成人雅虎 | 久久久激情网 | 一本到视频 | 免费黄色看片网站 | 中文字幕一区视频 | 在线观看亚洲色图 | 国产精品揄拍100视频 | 免费啪啪网 | 日韩免费高清视频 | 欧美亚洲一区二区在线观看 | 精品人体无码一区二区三区 | 国产99免费视频 | 天堂av片| 亚洲精品网站在线播放gif | 十八岁世界在线观看高清免费韩剧 | 黄视频在线播放 | 午夜精品久久久久久久无码 | 久久精品国产99久久不卡 | 欧美日日日 | 日本三级视频 | 久久中文字幕精品 | 久久奇米 | 熟女俱乐部一区二区视频在线 | 亚洲熟妇无码av在线播放 | 成人av免费网址 | av免费在线电影 | 狠色综合7777夜色撩人 | av大全在线 | 欧美色射 | 成人免费观看网站 | 在线观看日韩国产 | 成人在线中文字幕 | 亚洲日本天堂 | 免费性情网站 | 国产xxxxx| 亚洲暴爽 | 精品日本一区二区 | 日本少妇b | 久久亚洲精品石原莉奈 | 成人资源在线观看 | 国产成人麻豆精品午夜在线 | 亚洲小视频在线播放 | 久久精彩视频 | 日韩国产小视频 | 九九热在线视频免费观看 | 免费的av在线 | 国产黄色大片在线观看 | av老司机久久 | 亚洲国产婷婷香蕉久久久久久99 | 美女脱了内裤喂我喝尿视频 | 精品熟女一区 | 日韩精品电影一区二区 | 自拍偷自拍亚洲精品播放 | 爽爽淫人 | xxxxwww一片 | 少妇人妻一区二区三区 | 91浏览器在线观看 | 日韩av影片在线观看 | 午夜网站免费 | 亚洲精品一区二区口爆 | 精品综合在线 | 中文字幕无线码一区 | 一本到视频 | 色女人网站 | 成人免费毛片网 | 丰满人妻一区二区三区精品高清 | 午夜一级黄色片 | 日韩激情视频一区二区 | 国产精品久久久久久久久久久久久久久 | 性生活av | 天天艹夜夜艹 | 国产乱妇无码大片在线观看 | 久久永久视频 | 日韩欧美一区二 | 日日操日日摸 | 国产男女猛烈无遮挡a片漫画 | 欧美黑人粗大 | 手机在线亚洲 | 亚洲欧美综合网 | 男人天堂亚洲天堂 | 久久精品资源 | 人人妻人人爽人人澡人人精品 | 欧美一线天 | 天天做天天操 | 少妇太紧太爽又黄又硬又爽 | 52av在线| 日本久久久网站 | 精品国产96亚洲一区二区三区 | av每日更新 | 亚洲图片欧美在线 | 久久精品偷拍视频 | 欧美成人精精品一区二区频 | 国产精品18久久久久久久久 | 囯产精品久久久久久 | 99热这里有精品 | 美国av毛片 |