scala:主构造方法和辅助构造方法
@
构造器(构造方法)
作用:
- 构造对象
- 初始化属性(给对象的属性赋值)
Java中构造器
- 方法名和类名保持一致
- 构造方法没有返回值类型
- 构造方法可以重载
Scala中构造器
主构造方法#
- 在声明类的同时,就定义了主构造方法,换言之,类就是主构造方法
- 在一个类中,主构造方法只能有一个
辅助构造方法#
- 方法名必须叫
this
- 在辅助构造方法开始(第一行)必须直接或者间接的调用主构造方法
- 辅助构造方法可以重载
scala代码示例
object Scala08_TestConstructor {
def main(args: Array[String]): Unit = {
//val std: Student08 = new Student08()
//val std: Student08 = new Student08("jingjing")
val std: Student08 = new Student08("jingjing",18)
}
}
class Student08{
println("0----Student08的主构造方法被调用了")
var name:String = _
var age:Int = _
//声明辅助构造方法
def this(name:String){
//直接调用主构造方法
this()
println("1----Student08的辅助构造方法被调用了")
this.name = name
}
def this(name:String,age:Int){
//间接调用主构造方法
this(name)
println("2----Student08的辅助构造方法被调用了")
this.age = age
}
/*//以下写法不是构造方法
def Student08()={
println("Student08的构造方法被调用了")
}*/
}
scala有参数的主构造方法
- 在声明主构造方法参数的时候,如果参数前什么也不加,那么参数就作为当前类的局部变量使用,不能作为类的属性被访问
- 如果需要将参数作为属性被访问的话,那么在参数声明前加
var
或者val
关键字 - 主构造方法参数不能和类中定义的属性名相同
object Scala09_TestConstructor {
def main(args: Array[String]): Unit = {
//val stdJ: Student09 = new Student09
//stdJ.name = "jingjing"
//stdJ.age = 16
//println(stdJ.name)
var std = new Student09("jingjing",17)
println(std.name)
}
}
/*
//只提供无参的主构造,单独定义
class Student09{
var name:String = _
var age:Int = _
}
*/
/*
//在scala语言中,以下写法比较少,如果这样写,那就是受java毒害太深了
class Student09(namePararm:String,ageParam:Int){
var name:String = namePararm
var age:Int = ageParam
}
*/
//在声明主构造方法参数的时候,如果参数前什么也不加,那么参数就作为当前类的局部变量使用,不能作为类的属性被访问
//如果需要将参数作为属性被访问的话,那么在参数声明前加var或者val关键字
class Student09(var name:String, var age:Int){
def m1(): Unit ={
println(name)
println(age)
}
}
/*
//同时提供主、辅助构造方法
class Student09{
var name:String = _
var age:Int = _
def this(name:String,age:Int){
this()
this.name = name
this.age = age
}
}*/
作者: 孙晨c
出处:https://www.cnblogs.com/sunbr/p/14441396.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
标签:
scala
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目