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