1 scala中簡單類的定義和調用
class One {
private var age:Int=8
def say(x:Int)=this.age=x
def hello=println("age:"+age)
}
注意:
scala中沒有參數的函數或方法,調用時可以不使用() ,但是hello方法定義時沒有加入(),所以調用時也不能使用();
def main(args: Array[String]): Unit = {
var x:One=new One
x.say(18)
x.hello
}
2 scala類屬性生成的getter和setter方法
class Hello{
private var age:Int=8
var sname:String="hello"
}
通過編譯命令編譯該文件
> scalac d.scala
生成編譯後的文件Hello.class
通過javap命令查詢編譯成功的字節碼文件
>javap -private Hello
Compiled from "d.scala"
public class Hello {
private int age;
private java.lang.String sname;
private int age();
private void age_$eq(int);
public java.lang.String sname();
public void sname_$eq(java.lang.String);
public Hello();
}
注意:
私有屬性生成對應私有的getter和setter方法
重寫對屬性的get和set方法
class Hello{
private var age:Int=8
var sname:String="hello"
def xage_=(x:Int){
this.age=x
}
def xage=this.age
}
調用
var x:Hello=new Hello
x.xage=68
val y=x.xage
注意:
如果屬性是val,該屬性只有getter方法
3 Bean屬性
首先導入
import scala.beans.BeanProperty
class Three {
@BeanProperty var age:Int=_
}
調用中證明@BeanProperty標記的屬性生成了四個方法
(
public int age();
public void age_$eq(int);
public void setAge(int);
public int getAge();
public Three();
)
var x=new Three
x.setAge(8)
x.getAge
x.age=6
x.age=66
3 輔助構造器
scala中可以有多個輔助構造器,輔助構造器特點:
A:名稱必須是this;
B:輔助構造器中第一句必須通過this調用主構造器或其他已經聲明的輔助構造器
class Four {
def this(age:Int){
this()
println("constructor age:"+age)
}
}
4 主構造器
主構造器的特點A:參數放在類名之後,如果參數包含var或val則該參數被編譯成成員屬性;
B:在類中的書寫的所以語句當做主構造器中的代碼;
5 單例對象
scala類中沒有靜態方法或靜態屬性,但是scala的object對象提供class的單個實例,注意單例對象不能提供
構造函數;
object Three {
def say: Unit ={
println("three say...")
}
def main(args: Array[String]): Unit = {
Three.say
}
}
6 伴生對象
在類的同一個文件中提供與類同名的伴生對象,該伴生對象可以被類中方法和屬性調用
class Three{
private var xage:Int=9
def say: Unit ={
println("three say...")
Three.incre
}
}
object Three {
def incre={
printf("ok..........")
}
}
apply方法返回伴生對象
自定義apply方法,並實例化
class Three(var xname:String){
println("i am "+xname)
}
object Three{
def apply(x:String): Three = new Three(x)
}
調用apply方法
val h=Three.apply("xx")
val h2=Three("abc")