類和對象

創建類:

val修飾常量,不可修改。
var修飾變量,可修改。

類是可以傳參的!還得指定參數類型

類中的屬性默認有get。set方法,使用時直接賦值就好了

new的時候,除了方法不執行,其它的都執行

使用new Person(“husky”,4)的方式生成對象,使用val修飾,更高容易回收
方法調用。使用對象調用方法:p.doSomething()。

class Person(xname:String,xage:Int){
  val name=xname
  var age =xage
  var sex="M"

  //構造方法
  def this(name:String,age:Int,sex:String){
    this(name,age)//重寫構造,第一行必須調用默認的構造,即傳2個參數
    this.sex=sex
  }
  //def定義方法
  def doSomething():Unit={
    println("hello world!")
  }
}

創建對象:

Scala Object相當於java中的單例,object中定義的全是靜態的,相當於java的工具類。

如果不使用val/var修飾,就相當於是私有的。無法p.xname。如果使用val/var修飾,就能使用
對象p.xname

Object不能傳參,除非有默認的apply方法。並且,編譯器會主動尋找和傳入的參數個數相同的apply方法。ClassAndObj(1)調用的是含有1個參數的apply方法。

雖然Person類的構造方法中有3個參數,但是我依然可以傳2個參數,第三個參數就使用類中默認值了:val person = new Person(“lisi”,99)

object ClassAndObj {

    def main(args: Array[String]): Unit = {
    val p = new Person("zhangsan",4,"F")
    p.doSomething()
    p.age=999//屬性默認有get、set,直接賦值就行
    println(p.name+":"+p.age)//如果Person中的name被private修飾,除非本類改名Person,否則無法訪問到name。此時類和對象的關係就是伴生類、伴生對象

    //Object類不能傳參,如果傳入參數,就會主動尋找和傳入參數個數相同的apply方法
    ClassAndObj(1)//這是一個參數的apply方法
    ClassAndObj(1,"hello")//這是2個參數的apply方法
    }
    def apply(i:Int)={
    println("這是一個參數的apply方法")
  }
  def apply(i:Int,s:String)={
    println("這是2個參數的apply方法")
  }
}

如果在同一個文件中,object對象和class類的名稱相同,則這個對象就是這個類的伴生對象,這個類就是這個對象的伴生類。可以互相訪問私有變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章