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