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
  }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值