創建類:
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類的名稱相同,則這個對象就是這個類的伴生對象,這個類就是這個對象的伴生類。可以互相訪問私有變量。