scala面向?qū)ο?/h1>

一.包嵌套
( 1)一個(gè)源文件中可以聲明多個(gè) package
( 2)子包中的類可以直接訪問父包中的內(nèi)容,而無需導(dǎo)包
( 3)包對象:在 Scala 中可以為每個(gè)包定義一個(gè)同名的包對象粘茄, 定義在包對象中的成員签舞, 作為其對
應(yīng)包下所有 class 和 object 的共享變量, 可以被直接訪問柒瓣。
( 4)導(dǎo)包說明

圖片.png

(1)scala里的setget: @BeanPropetry

    class Person {
      var name: String = "bobo" //定義屬性
      var age: Int = _ // _表示給屬性一個(gè)默認(rèn)值
      //Bean 屬性( @BeanProperty)
      @BeanProperty var sex: String = "男"
      //val 修飾的屬性不能賦默認(rèn)值儒搭,必須顯示指定
    }

封裝

一.概念
Scala 中的 public 屬性,底層實(shí)際為 private芙贫,并通過 get 方法( obj.field())和 set 方法
( obj.field_=(value))對其進(jìn)行操作搂鲫。所以 Scala 并不推薦將屬性設(shè)為 private,再為其設(shè)置
public 的 get 和 set 方法的做法磺平。但由于很多 Java 框架都利用反射調(diào)用 getXXX 和 setXXX 方
法魂仍,有時(shí)候?yàn)榱撕瓦@些框架兼容,也會(huì)為 Scala 的屬性設(shè)置 getXXX 和 setXXX 方法(通過
@BeanProperty 注解實(shí)現(xiàn))

二.訪問權(quán)限

( 1) Scala 中屬性和方法的默認(rèn)訪問權(quán)限為 public拣挪,但 Scala 中無 public 關(guān)鍵字擦酌。
( 2) private 為私有權(quán)限,只在類的內(nèi)部和伴生對象中可用菠劝。
( 3) protected 為受保護(hù)權(quán)限赊舶, Scala 中受保護(hù)權(quán)限比 Java 中更嚴(yán)格,同類赶诊、子類可以
訪問笼平,同包無法訪問

( 4) private[包名]增加包訪問權(quán)限舔痪,包名下的其他類也可以使用

對象

1.自動(dòng)推導(dǎo)變量類型不能多態(tài)出吹,所以多態(tài)需要顯示聲明(?)

2.構(gòu)造器:Scala包括主構(gòu)造器和輔助構(gòu)造器。
注:輔助構(gòu)造器不能直接構(gòu)建對象辙喂,必須直接或間接調(diào)用主構(gòu)造方法捶牢。

3.構(gòu)造器里的三種參數(shù)設(shè)置

class Test(name:String,var age:Int,val sex:String) {
  /*
  * name:局部變量
  * age:成員變量
  * sex:只讀成員變量
  * */
  var name1:String = name
}

繼承和多態(tài)

1.scala中屬性和方法都是動(dòng)態(tài)綁定

      class a{
        val name:String = "a"
        def hello(): Unit = {
          println("hello a")
        }
      }
      class aSon extends a{
        override val name:String = "aSon"
        override def hello(): Unit = println("hello b")
      }
      object Test{
        def main(args: Array[String]): Unit = {
          var aa = new aSon
          println(aa.name)
          aa.hello()
        }
      }

輸出是:aSon 鸠珠,hello b。如果是java秋麸,輸出是a渐排,hello b

抽象類

1.重寫非抽象方法需要用 override 修飾,重寫抽象方法則可以不加 override
2.子類中調(diào)用父類的方法使用 super 關(guān)鍵字
3.子類對抽象屬性進(jìn)行實(shí)現(xiàn)灸蟆,父類抽象屬性可以用 var 修飾驯耻;子類對非抽象屬性重寫,父類非抽象屬性只支持 val 類型炒考,而不支持 var可缚。
因?yàn)?var 修飾的為可變變量,子類繼承之后就可以直接使用斋枢,沒有必要重寫(但是寫var不會(huì)報(bào)錯(cuò))

匿名子類

                //Person是抽象類
    val person = new Person {
    override val name: String = "teacher"
    override def hello(): Unit = println("hello teacher")

單例對象(伴生對象)

Scala語言是完全面向?qū)ο蟮恼Z言帘靡, 所以并沒有靜態(tài)的操作( 即在Scala中沒有靜態(tài)的概

念) 。但是為了能夠和Java語言交互(因?yàn)镴ava中有靜態(tài)概念)瓤帚,就產(chǎn)生了一種特殊的對象
來模擬類對象描姚, 該對象為單例對象。若單例對象名與類名一致戈次,則稱該單例對象這個(gè)類的伴
生對象轩勘,這個(gè)類的所有“靜態(tài)” 內(nèi)容都可以放置在它的伴生對象中聲明。

說明

( 1)單例對象采用 object 關(guān)鍵字聲明

( 2)單例對象對應(yīng)的類稱之為伴生類怯邪,伴生對象的名稱應(yīng)該和伴生類名一致绊寻。

( 3)單例對象中的屬性和方法都可以通過伴生對象名(類名)直接調(diào)用訪問。

**apply方法**

( 1)通過伴生對象的 apply 方法悬秉, 實(shí)現(xiàn)不使用 new 方法創(chuàng)建對象澄步。

( 2)如果想讓主構(gòu)造器變成私有的,可以在()之前加上 private搂捧。

( 3) apply 方法可以重載驮俗。

( 4) Scala 中 obj(arg)的語句實(shí)際是在調(diào)用該對象的 apply 方法,即 obj.apply(arg)允跑。用
以統(tǒng)一面向?qū)ο缶幊毯秃瘮?shù)式編程的風(fēng)格王凑。

( 5)當(dāng)使用 new 關(guān)鍵字構(gòu)建對象時(shí),調(diào)用的其實(shí)是類的構(gòu)造方法聋丝,當(dāng)直接使用類名構(gòu)
建對象時(shí)索烹,調(diào)用的其實(shí)時(shí)伴生對象的 apply 方法。

特質(zhì)(接口)

基礎(chǔ)
1.所有的 Java 接口都可以當(dāng)做 Scala 特質(zhì)使用
2.動(dòng)態(tài)混入:可靈活的擴(kuò)展類的功能

    val t2 = new Teacher with SexTrait {
                  override var sex: String = "男"
    }
    println(t2.sex)

特質(zhì)疊加
第一種弱睦,一個(gè)類( Sub)混入的兩個(gè) trait( TraitA百姓, TraitB)中具有相同的具體方法,且兩個(gè) trait 之間沒有任何關(guān)系况木,解決這類沖突問題垒拢,直接在類( Sub)中重寫沖突方法

圖片.png

第二種旬迹,一個(gè)類( Sub)混入的兩個(gè) trait( TraitA, TraitB)中具有相同的具體方法求类,且兩個(gè) trait 繼承自相同的 trait( TraitC)奔垦,及所謂的“鉆石問題”,解決這類沖突問題尸疆, Scala采用了特質(zhì)疊加的策略椿猎。


圖片.png

注:特質(zhì)疊加順序

圖片.png

特質(zhì)自身類型

使用_:Name(with Name)=>this:Name(with Name)=> 將Name類/接口/特質(zhì)注入

class User(val name: String, val age: Int)
class Dao {
  def insert(user: User) = {
    println("insert into database :" + user.name)
  }
}
trait APP {
  _: Dao =>
  def login(user: User): Unit = {
    println("login :" + user.name)
    insert(user)
  }
}
object MyApp extends Dao with APP{
  def main(args: Array[String]): Unit = {
    login(new User("bobo", 11))

  }
}

特質(zhì)和抽象類的區(qū)別

1.優(yōu)先使用特質(zhì)。一個(gè)類擴(kuò)展多個(gè)特質(zhì)是很方便的寿弱,但卻只能擴(kuò)展一個(gè)抽象類犯眠。

2.如果你需要構(gòu)造函數(shù)參數(shù),使用抽象類症革。因?yàn)槌橄箢惪梢远x帶參數(shù)的構(gòu)造函數(shù)筐咧,
而特質(zhì)不行( 有無參構(gòu)造)

**類型檢查和轉(zhuǎn)換
( 1) obj.isInstanceOf[T]:判斷 obj 是不是 T 類型。
( 2) obj.asInstanceOf[T]:將 obj 強(qiáng)轉(zhuǎn)成 T 類型地沮。
( 3) classOf 獲取對象的類名嗜浮。

val pClass: Class[Person] = classOf[Person]

枚舉類和應(yīng)用類

// 枚舉類
object Color extends Enumeration {
val RED = Value(1, "red")
val YELLOW = Value(2, "yellow")
val BLUE = Value(3, "blue")
}
// 應(yīng)用類
object test extends App {
//不用main方法就能執(zhí)行
println(Color.RED)
}

type定義類型
就是給原有類型換個(gè)名

  type S = String
  var v:S = "aa"
   //true
  println(v.isInstanceOf[String])
  var v1:String = "aa"
//true
 println(v1.isInstanceOf[S])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末羡亩,一起剝皮案震驚了整個(gè)濱河市摩疑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畏铆,老刑警劉巖雷袋,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辞居,居然都是意外死亡楷怒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門瓦灶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸠删,“玉大人,你說我怎么就攤上這事贼陶∪信荩” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵碉怔,是天一觀的道長烘贴。 經(jīng)常有香客問我,道長撮胧,這世上最難降的妖魔是什么桨踪? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮芹啥,結(jié)果婚禮上锻离,老公的妹妹穿的比我還像新娘铺峭。我一直安慰自己,他們只是感情好汽纠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布逛薇。 她就那樣靜靜地躺著,像睡著了一般疏虫。 火紅的嫁衣襯著肌膚如雪永罚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天卧秘,我揣著相機(jī)與錄音呢袱,去河邊找鬼。 笑死翅敌,一個(gè)胖子當(dāng)著我的面吹牛羞福,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚯涮,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼治专,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遭顶?” 一聲冷哼從身側(cè)響起张峰,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棒旗,沒想到半個(gè)月后喘批,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铣揉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年饶深,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逛拱。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敌厘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朽合,到底是詐尸還是另有隱情俱两,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布旁舰,位于F島的核電站锋华,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏箭窜。R本人自食惡果不足惜毯焕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纳猫,春花似錦婆咸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侵续,卻和暖如春倔丈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背状蜗。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工需五, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轧坎。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓宏邮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缸血。 傳聞我的和親對象是個(gè)殘疾皇子蜜氨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容