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
  }

}

 

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