Scala單例物件、伴生類以及伴生物件、apply介紹
阿新 • • 發佈:2019-02-19
1、程式碼如下:
package com.yy.oop /** * 伴生類和伴生物件 * class Student是伴生物件Object Student的伴生類 * object Student是伴生類class Student的伴生物件 */ //伴生類 class Student(var name:String,var address:String){ private var phone="110" //直接訪問伴生物件的私有成員 def infoCompObj() = println("伴生類中訪問伴生物件:" + Student.sno) } //伴生物件 object Student { private var sno:Int = 100 def incrementSno()={ sno += 1 //加1 sno //返回sno } def main(args: Array[String]): Unit = { println("單例物件:" + Student.incrementSno()) //單例物件 //例項化伴生類 val obj = new Student("yy","bj") obj.infoCompObj(); } }
2、結果如下
單例物件:101
伴生類中訪問伴生物件:101
3、scala apply
package com.yy.oop /** * 伴生類和伴生物件 * class Student是伴生物件Object Student的伴生類 * object Student是伴生類class Student的伴生物件 */ //伴生類 class Student(var name:String,var address:String){ private var phone="110" //直接訪問伴生物件的私有成員 def infoCompObj() = println("伴生類中訪問伴生物件:" + Student.sno) } //伴生物件 object Student { private var sno:Int = 100 def incrementSno()={ sno += 1 //加1 sno //返回sno } //定義apply方法,例項化伴生類 def apply(name1:String,address1:String)= new Student(name1,address1) def main(args: Array[String]): Unit = { println("單例物件:" + Student.incrementSno()) //單例物件 //例項化伴生類 val obj = new Student("yy","bj") obj.infoCompObj(); println("通過伴生物件的apply方法訪問伴生類成員:") val obj2 = Student("yy_apply","bj_apply") //實際是通過apply方法進行了物件例項化,避免了手動new物件 println(obj2.name) println(obj2.address) } }
結果如下:
單例物件:101
伴生類中訪問伴生物件:101
通過伴生物件的apply方法訪問伴生類成員:
yy_apply
bj_apply