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
}
}