java接口(interface) & scala 特質(zhì)(trait)

一、java接口
只要沒有implement接口就沒有實(shí)現(xiàn)症革。

package com.atguigu.bigdata.scala.chapter06;

public class Test {
    public static void main(String[] args) {
        CCC ccc = new BBB();  //為什么BBB沒有實(shí)現(xiàn)接口CCC卻能用罗晕?子類包含父類AAA所有內(nèi)容
        System.out.println(BBB.class.getInterfaces().length);  //0
        System.out.println(AAA.class.getInterfaces().length);  //1
        
    }
}

interface CCC {

}

class AAA implements CCC{

}

class BBB extends AAA{

}

二、scala特質(zhì)trait
1.如果一個(gè)對(duì)象符合某個(gè)特質(zhì)憔儿,那么可以將這個(gè)特質(zhì)“混入”到對(duì)象中
2.特質(zhì)中可以聲明屬性和方法
3.如果類沒有父類可以使用extends關(guān)鍵字混入(類似java抽象類)
4.如果有父類忆植,使用with關(guān)鍵字混入特質(zhì)
5.動(dòng)態(tài)混入:創(chuàng)建對(duì)象的同時(shí)混入特質(zhì)

package com.atguigu.bigdata.scala.chapter06

object Scala04_Field {
  def main(args: Array[String]): Unit = {

    val user = new User14()
    user.test()

    //動(dòng)態(tài)混入
    val user1444 = new User14444() with MyTrait14
    user1444.test()
  }
}

trait MyTrait14{
  //特質(zhì)中可以聲明屬性和方法
  //功能
  def test() : Unit = {
    println("test trait")
  }
}

//混入
class User14 extends MyTrait14 {

}

class Parent14 {

}

//如果有父類,使用with關(guān)鍵字混入特質(zhì)
class User144 extends Parent14 with MyTrait14{

}
class User14444 {

}

三、特質(zhì)中的抽象方法和屬性

  1. 實(shí)現(xiàn)特質(zhì)朝刊,必須重寫特質(zhì)中的抽象方法
    2.實(shí)現(xiàn)特質(zhì)耀里,必須重寫特質(zhì)中的抽象屬性并初始化
    3.特質(zhì)的完整屬性可以重寫也可以不重寫
    可以對(duì)比抽象類。
package com.atguigu.bigdata.scala.chapter06

object Scala04_Field {
  def main(args: Array[String]): Unit = {


  }
}

trait MyTrait15 {
  //抽象方法: 只聲明拾氓,不初始化
  def test() : Unit

  def test1() : Unit = {

  }

  //抽象屬性
  val name : String

  //完整屬性
  val age : Int = 20

}

class User15 extends MyTrait15 {
  //實(shí)現(xiàn)特質(zhì)冯挎,必須重寫特質(zhì)中的抽象方法
  override def test(): Unit = {

  }

  //實(shí)現(xiàn)特質(zhì),必須重寫特質(zhì)中的抽象屬性并初始化
  override val name: String = "張三"
  
  //特質(zhì)的完整屬性可以重寫也可以不重寫
  override val age: Int = 30
}

四痪枫、特質(zhì)织堂、類之間的關(guān)系

  1. 特質(zhì)可以混入其他特質(zhì)
    2.特質(zhì)可以繼承其他類
    3.類可以混入多個(gè)特質(zhì),使用with關(guān)鍵字
package com.atguigu.bigdata.scala.chapter06

object Scala04_Field {
  def main(args: Array[String]): Unit = {


  }
}

//特質(zhì)可以繼承其他類
trait MyTrait16 extends User166{

}

//特質(zhì)可以混入其他特質(zhì)
trait MyTrait166 extends MyTrait16{

}

trait Mytrait1666{

}

//類可以混入多個(gè)特質(zhì)奶陈,使用with關(guān)鍵字
class User16 extends MyTrait16 with MyTrait166 with Mytrait1666 {

}

class User166 {

}

五易阳、trait的初始化順序
1.如果類存在父類,先初始化父類
2.父類初始化完成后吃粒,如果類存在多個(gè)特質(zhì)潦俺,會(huì)從左到右初始化
3.特質(zhì)只會(huì)初始化一次,所以如果之前初始化了徐勃,就不再初始化了事示。

package com.atguigu.bigdata.scala.chapter06

object Scala04_Field {
  def main(args: Array[String]): Unit = {

    val user17 = new User177()

  }
}

trait MyTrait17 {
  println("MyTrait17")

}

trait MyTrait177 {
  println("MyTrait177")
}


trait MyTrait1777 {
  println("MyTrait1777")
}

class User17 extends MyTrait17 {
  println("user17....")

}

class User177 extends User17 with MyTrait17 with MyTrait177 with MyTrait1777 {
  println("user177....")
}

打印:
MyTrait17
user17....
MyTrait177
MyTrait1777
user177....

1)執(zhí)行子類User177
2)執(zhí)行父類User17
3)執(zhí)行(構(gòu)建)父類User17的特質(zhì)MyTrait17
4)執(zhí)行特質(zhì)MyTrait17打印MyTrait17
5)執(zhí)行父類User17的類體,打印user17....
6)執(zhí)行with MyTrait17僻肖,打印MyTrait177
7)執(zhí)行with MyTrait1777肖爵,打印MyTrait1777
8)執(zhí)行子類User177類體,打印user177....

注意:子類繼承父類臀脏,并沒有實(shí)現(xiàn)父類實(shí)現(xiàn)的特質(zhì)(如上述class User17 extends MyTrait17劝堪,那么為什么class User177 extends User17 with MyTrait17沒有打兩遍MyTrait17呢?原因是父類構(gòu)造的時(shí)候已經(jīng)初始化trait MyTrait17一次了揉稚,所以在子類再with MyTrait17時(shí)秒啦,不再對(duì)trait MyTrait17初始化了。

六搀玖、trait的執(zhí)行順序
1.特質(zhì)初始化順序從左至右余境,執(zhí)行順序從右到左
2.此處的super不是父特質(zhì)的概念,而是上一個(gè)特質(zhì)的概念灌诅,如下LogFile的上一個(gè)特質(zhì)是DB

package com.atguigu.bigdata.scala.chapter06

object Scala04_Field {
  def main(args: Array[String]): Unit = {
    val mysql = new Mysql()
    mysql.insert()
  }
}

trait Operate {
  def insert() : Unit = {
    println("插入數(shù)據(jù)")
  }
}

trait DB extends Operate {
  override def insert(): Unit = {
    print("向數(shù)據(jù)庫表中 ")
    super.insert()
  }
}

trait LogFile extends Operate {
  override def insert(): Unit = {
    print("向日志文件中 ")

    //此處的super不是父特質(zhì)的概念芳来,而是上一個(gè)特質(zhì)的概念,如下LogFile的上一個(gè)特質(zhì)是DB
    super.insert()
  }
}

//特質(zhì)初始化順序從左至右猜拾,執(zhí)行順序從右到左
class Mysql extends DB with LogFile {

}


打蛹瓷唷:向日志文件中 向數(shù)據(jù)庫表中 插入數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市关带,隨后出現(xiàn)的幾起案子侥涵,更是在濱河造成了極大的恐慌,老刑警劉巖宋雏,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芜飘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡磨总,警方通過查閱死者的電腦和手機(jī)嗦明,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚪燕,“玉大人娶牌,你說我怎么就攤上這事」菽桑” “怎么了诗良?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鲁驶。 經(jīng)常有香客問我鉴裹,道長,這世上最難降的妖魔是什么钥弯? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任径荔,我火速辦了婚禮,結(jié)果婚禮上脆霎,老公的妹妹穿的比我還像新娘总处。我一直安慰自己,他們只是感情好睛蛛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布鹦马。 她就那樣靜靜地躺著,像睡著了一般玖院。 火紅的嫁衣襯著肌膚如雪菠红。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天难菌,我揣著相機(jī)與錄音试溯,去河邊找鬼。 笑死郊酒,一個(gè)胖子當(dāng)著我的面吹牛遇绞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燎窘,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼摹闽,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了褐健?” 一聲冷哼從身側(cè)響起付鹿,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤澜汤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后舵匾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俊抵,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年坐梯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徽诲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吵血,死狀恐怖谎替,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹋辅,我是刑警寧澤钱贯,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站侦另,受9級(jí)特大地震影響喷舀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淋肾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一硫麻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧樊卓,春花似錦拿愧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唾戚,卻和暖如春柳洋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叹坦。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國打工熊镣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人募书。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓绪囱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莹捡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鬼吵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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