scala中 伴生類和伴生對象的使用(爲什麼new可以省略)

package com.cxb.demo.chapter11

/**
  * @Auther: sss
  * @Date: 2020/1/2 15:59
  * @Description:
  */
object ApplyDemo {
  def main(args: Array[String]): Unit = {

    //這裏new出來的是 伴生類 的一個實例
    val demo = new AccompanyDemo(1, 2)
    printf("demo.a的值爲:%d ,demo.b的值爲:%d ", demo.a, demo.b)

    //下面沒有使用New  它底層調用了伴生對象中的apply()方法 new了一個 伴生類 的實例
    val accompany = AccompanyDemo(11, 22)
    printf("accompany.a的值爲:%d ,accompany.b的值爲:%d ", accompany.a, accompany.b)

    //下面調用的是伴生對象
    val accompanyDemo = AccompanyDemo
    accompanyDemo.sum(demo.a, demo.b)
    
  }
}


//伴生類
class AccompanyDemo(num01: Int, num02: Int) {

  var a = num01
  var b = num02

}

//伴生對象
object AccompanyDemo {

  def apply(num01: Int, num02: Int): AccompanyDemo = new AccompanyDemo(num01, num02)

  def sum(x: Int, y: Int): Int = {
    x + y
  }

}

另一種用法

package com.cxb.demo.chapter11

/**
  * @Auther: sss
  * @Date: 2020/1/2 15:59
  * @Description:
  */
object ApplyDemo {
  def main(args: Array[String]): Unit = {

    //這裏new出來的是 伴生類 的一個實例
    val demo = new AccompanyDemo
    printf("demo.a的值爲:%d ,demo.b的值爲:%d ", demo.a, demo.b)

    //TODO 下面沒有使用New,而是增加了 ()  它底層調用了伴生對象中的apply()方法 new了一個 伴生類 的實例
    val accompany = AccompanyDemo()
    printf("accompany.a的值爲:%d ,accompany.b的值爲:%d ", accompany.a, accompany.b)


    //TODO 下面用的是伴生對象  accompanyDemo只是伴生對象的一個引用,也可直接 AccompanyDemo.sum
    val accompanyDemo = AccompanyDemo
     accompanyDemo.sum(demo.a, demo.b)

  }
}


//伴生類
class AccompanyDemo {

  var a = 0
  var b = 9

}

//伴生對象
object AccompanyDemo {
  //TODO 注意apply後面加()  
  def apply(): AccompanyDemo = new AccompanyDemo()

  def sum(x: Int, y: Int): Int = {
    x + y
  }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章