32_面向对象_构造器
说明
* 和java一样,scala创建对象时,也会调用构造器方法,并且可以有多个构造器
*
scala的构造器
* 分类
* 主构造器(类体本身) 、 辅助构造器
* 语法
* class 类名(形参列表) {
* // 主构造器
* // 成员
* def this(形参列表){//辅助构造器1
* }
* def this(形参列表){//辅助构造器2
* }
* }
辅助构造器
* 语法
* def this(参数列表) {
* this() //调用主构造器
* 方法体
* }
* 说明
* 1. 方法名称必须为 this,可以有多个,编译器会根据 参数的个数和类型区分 (方法的重载)
* 2. 辅助构造方法不能直接构造对象,必须 调用主构造方法 this()
* 3. 构造器1可以调用 构造器2,被调用的构造器必须提前声明
主构造器
* 主构造器-参数列表
* 语法
* class 类名(参数列表)
* 说明
* 1. 没有修饰符,参数就是局部变量
* 2. var修饰参数,作为类的成员属性,可以修改
* 3. val修饰参数,作为类的成员属性,不可以修改
* */
/** * @author gaocun * @create 2021-10-22 6:49 PM */ object 类_构造器_06 { /* * 说明 * 和java一样,scala创建对象时,也会调用构造器方法,并且可以有多个构造器 * * scala的构造器 * 分类 * 主构造器(类体本身) 、 辅助构造器 * 语法 * class 类名(形参列表) { * // 主构造器 * // 成员 * def this(形参列表){//辅助构造器1 * } * def this(形参列表){//辅助构造器2 * } * } * 辅助构造器 * 语法 * def this(参数列表) { * this() //调用主构造器 * 方法体 * } * 说明 * 1. 方法名称必须为 this,可以有多个,编译器会根据 参数的个数和类型区分 (方法的重载) * 2. 辅助构造方法不能直接构造对象,必须 调用主构造方法 this() * 3. 构造器1可以调用 构造器2,被调用的构造器必须提前声明 * 主构造器 * 主构造器-参数列表 * 语法 * class 类名(参数列表) * 说明 * 1. 没有修饰符,参数就是局部变量 * 2. var修饰参数,作为类的成员属性,可以修改 * 3. val修饰参数,作为类的成员属性,不可以修改 * */ } package Outer { // 主构造器 (无参) class OneClass { // 成员 var id: Int = _ var name: String = _ println("OneClass - 主构造器 调用了") // 辅助构造器1 def this(id: Int) { this() // 调用 主构造器 this.id = id println("OneClass - 辅助构造器1 调用了") } // 辅助构造器2 def this(name: String) { this() // 调用 主构造器 this.name = name println("OneClass - 辅助构造器2 调用了") } // toString方法 def tostring() = { printf("OneClass id : %d name : %s\n", this.id, this.name) } } // 主构造器 (带参数 无修饰符) class TwoClass(id: Int, name: String) { printf("TwoClass- 主构造器 - id :%d name :%s\n", id, name) // show def show = printf("TwoClass - id :%d name :%s\n", id, name) } // 主构造器 (带参数 有修饰符) class ThreeClass(var id: Int, var name: String) { printf("TwoClass- 主构造器 - id :%d name :%s\n", id, name) // show def show = printf("TwoClass - id :%d name :%s\n", id, name) } // 测试类 object test { def main(args: Array[String]): Unit = { // 调用主构造器 var obj1 = new OneClass() obj1.tostring // 调用主构造器 + 辅助构造器1 var obj2 = new OneClass(10) obj2.tostring // 调用主构造器 + 辅助构造器2 var obj3 = new OneClass("大王") obj3.tostring printf("==========测试 主构造器1==============\n") var tobj1 = new TwoClass(10, "大王") tobj1.show //println(tobj1.id) printf("==========测试 主构造器2==============\n") var thobj1 = new ThreeClass(10, "大王") thobj1.show println(thobj1.id) println(thobj1.name) } println("test - 主构造器 调用了") } }
【推荐】国内首个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带你走进微服务的世界