scala学习7--class、object、trait

scala语言中没有static成员存在,但是scala允许以某种方式去使用static成员
这个就是伴生机制,所谓伴生,就是在语言层面上,把static成员和非static成员用不同的表达方式,class和object,
但双方具有相同的package和name,但是最终编译器会把他们编译到一起,这是纯粹从语法层面上的约定。通过javap可以反编译看到。
另外一个小魔法就是单例,单例本质上是通过伴生机制完成的,直接由编译器生成一个class对象,这样至少在底层能够统一。

 多个构造方法都需要调用默认的构造方法

1
2
3
4
5
6
7
8
9
10
11
12
13
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的调用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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)
  }
}

 

posted @   dongdone  阅读(3179)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示