37_面向对象_伴生对象
伴生对象
* 语法
* object 对象名称 { 对象属性 }
* 说明
* 1. 类名.属性 / 类名.方法
* scala是完全面向对象,所有不能像java一样,定义静态属性
* 可以将属性定义伴生对象中,来模拟 java的静态属性
* 2. 伴生对象 是它伴生类的 单例对象,全局唯一一份
用private修饰主构造器
* 语法
* class 类名 private(参数列表) { 成员 }
* 用处
* 无法使用new 类名来创建对象
使用 对象名() 来创建对象
* 语法
* var obj = 对象名()
* 说明
* 这种方式是调用了伴生对象的apply方法
伴生对象的apply方法
* 说明
* 1. 伴生对象() = 伴生对象().apply()
/** * @author gaocun * @create 2021-10-25 4:56 PM */ object 伴生对象_11 { /* * 伴生对象 * 语法 * object 对象名称 { 对象属性 } * 说明 * 1. 类名.属性 / 类名.方法 * scala是完全面向对象,所有不能像java一样,定义静态属性 * 可以将属性定义伴生对象中,来模拟 java的静态属性 * 2. 伴生对象 是它伴生类的 单例对象,全局唯一一份 * 用private修饰主构造器 * 语法 * class 类名 private(参数列表) { 成员 } * 用处 * 无法使用new 类名来创建对象 * 使用 对象名() 来创建对象 * 语法 * var obj = 对象名() * 说明 * 这种方式是调用了伴生对象的apply方法 * 伴生对象的apply方法 * 说明 * 1. 伴生对象() = 伴生对象().apply() * * */ } package Outer11 { // 定义伴生对象 object BsClass { var id = 10 var name = "大王" println("BsClass - 主构造器") } // 定义类 (主构造器被private修饰) class PriClass private { var id = 10 var name = "PriClass" println("PriClass - 的主构造器") } // 通过伴生对象 的apply方法,来创建对象 object PriClass { def apply: PriClass = new PriClass() def apply(id: Int): Int = id } // 类的 apply 方法 class AppClass { def apply: AppClass = new AppClass() } // 测试对象 object test { def main(args: Array[String]): Unit = { var obj = BsClass; var obj1 = BsClass; println(obj) println(obj1) println(BsClass.id) println(BsClass.name) println("================") // var obj2 = new PriClass() // Error:(63, 18) constructor PriClass in class PriClass cannot be accessed in object test from object test in package Outer11 var obj2 = PriClass // 等价 PriClass.apply var obj3 = PriClass.apply var obj4 = PriClass.apply println(obj2) println(obj3) println(obj4) var id = PriClass(10) println(id) println("================") } } }
【推荐】国内首个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应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界