scala學習7--class、object、trait

scala語言中沒有static成員存在,可是scala容許以某種方式去使用static成員
這個就是伴生機制,所謂伴生,就是在語言層面上,把static成員和非static成員用不一樣的表達方式,class和object,
但雙方具備相同的package和name,可是最終編譯器會把他們編譯到一塊兒,這是純粹從語法層面上的約定。經過javap能夠反編譯看到。
另一個小魔法就是單例,單例本質上是經過伴生機制完成的,直接由編譯器生成一個class對象,這樣至少在底層可以統一。java

 多個構造方法都須要調用默認的構造方法ide

class User (x:Int,age:Int){//默認構造器
	val height = x;
	val this.age = age;
	var name ="";
	
	def this(){
		this(5,5);
	}
	def this(t1:Int,t2:Int,name:String){
		this(5,5);
		this.name=  name;
	}
}

class和object的調用方式this

class TestObject private{
	val t2 = "lskjdfkljd"
	var t=123
	def func01() = {
		println("gaga");
	}
}

object TestObject {
	val t1 = 123;
	var ssssgagag=1444;
	val single = new TestObject();
	
	def func02() = {
		println("gaga");
	}
	
	def main(args: Array[String]) {
		val t1 = new TestObject();
		
		println(t1.t2);
		t1.func01();
		
		
		TestObject.func02();
		println(TestObject.t1)
		println(TestObject.ssssgagag)
	}
}

類的繼承和traitscala

trait Listen{
	val name: String
  def listen() = {
    println("You friend " + name + " is listening")
  }
}

trait Read{
	val name: String
	def read() = {
	println("You friend " + name + " is reading")
}
}

trait Speak{
  val name: String
  def speak() = {
    println("You friend " + name + " is speaking.")
  }
}

class Human(val name : String){
  def listen() = {
    println(name + " is listening.")
  }
}

class Animal(val name: String){
}

class Cat(override val name: String) extends Animal(name: String) with Speak with Listen with Read{
	override def toString(): String = " hello "+name+"! "
}

object TestFriend {
  def main(args: Array[String]) {
  val f1 = new Listen();//java 接口很像 不能直接夠造

  val h1 = new Human("gaga");

  h1.listen();

    //這樣scat就是Friend了
    val scat = new Cat("hello kitty")
    scat.listen();
    scat.speak()
    println(scat)
  }
}
相關文章
相關標籤/搜索