scala编程 - 构造器

1、构造器概述

*1.1、scala构造器
*   scala构造对象也需要调用构造方法,并且了可以有任意多个构造方法
*   scala类的构造器:主构造器和辅助构造器
* 1.2、构造器基本语法
* def 类名(形参列表){//主构造器
*  //类体
*
*   def this(形参列表){//辅助构造器
*   }
*    def this(形参列表){//辅助构造器
*   }
*   ...辅助构造器可以有多个
* }
* 1.3、辅助构造器的数量
* 	辅助构造器的函数函数名称this,可以有多个,编译器通过不同参数区分
```python
object gouzaoqi {
  def main(args: Array[String]): Unit = {
    val st1 = new person("sta",19)
    println(st1)
  }
}


//构造器快速入门
//创建person对象同时初始化对象age属性值和name属性值
class person(name:String,age:Int) {
  var st_name: String = name
  var st_age: Int = age


  //重写tostring,便于输出对象信息
  override def toString: String = {
    "name=" + this.name + "\t age=" + this.age
  }
}

```scala
//输出结果
name=sta	 age=19

2、构造器注意细节

* scala构造器注意事项和细节

①构造器作用:完成新对象初始化,构造器没有返回值
②主构造器的声明直接放置于类名之后
③主构造器会执行类定义中的所有语句,即构造器也是方法(函数)
主构造器会将构造器里的除去函数部分,其余全部执行

object gouzaoqi {
  def main(args: Array[String]): Unit = {
  	//构造器调用
    val st1 = new person("sta",19)
    println(st1)
  }
}


//构造器快速入门
//创建person对象同时初始化对象age属性值和name属性值
class person(name:String,age:Int) {
  var st_name: String = name
  var st_age: Int = age
  println("this is one")

  //重写tostring,便于输出对象信息
  override def toString: String = {
    "name=" + this.name + "\t age=" + this.age

  }

  println("this is three")
}

//输出结果
this is one
this is three
name=sta	 age=19

***输出结果顺序:先调用主构造器里面出函数之外的东西 - 再调用主构造器里的函数

3、辅助构造器

①辅助构造器的名称为this。
②每个辅助构造器都必须以一个对先欠已经定义的其他构造器调用先开始。

object gouzaoqi {
  def main(args: Array[String]): Unit = {
    //调用主构造器
  //var st1 = new person("stu1",19)
  //println(st1)

    //调用辅助构造器def this(name:string)
    val st2 = new person("stu2")
    println(st2)
  }
}


//定义一个person类
//创建person对象同时初始化对象age属性值和name属性值
class person(inname:String,inage:Int) {
  var stu_name: String = inname
  var stu_age: Int = inage
  println("this is one")

  //重写tostring,便于输出对象信息
  override def toString: String = {
    "name=" + this.inname + "\t age" + this.inage
  }

  def this(name:String){
    //辅助构造器必须在第一行显式调用主构造器
    this("one",10)
    this.stu_name = name  //主构造属性重新赋值
  }
  println("this is three")
}
输出结果
this is one
this is three
name=one	 age10

***为什么是这样的输出结果???待核查

4、构造器属性相关

①如果主构造器是 inname,那么inname就是一个局部变量

class worker(inname:String){
  var name = inname
}

②2、如果主构造器是val inname,那么inname就是一个主构造器的只读私有属性

class worker(val inname:String){
  var name = inname
}

③3、如果主构造器是val inname,那么inname就是一个主构造器的可读写私有属性

class worker(var inname:String){
  var name = inname
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随缘清风殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值