1. 程式人生 > >Scala單例物件、伴生類以及伴生物件、apply介紹

Scala單例物件、伴生類以及伴生物件、apply介紹

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