快學scala筆記第五章 類

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")



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