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) } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构