scala學習7--class、object、trait


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

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

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的調用方式

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

類的繼承和trait

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM