scala Class

scala类

定义字段有两个关键字,val和var。val修饰的字段,相当于常量,只有get,没有set;var修饰的字段,既有get,又有set。
伴生对象和伴生类:在同一个scala的类文件中,如果一个class和object名字一样的类,那么class是object的伴生类,object是class的伴生对象。

被private[包名] 修饰的类,只能在该包下可以访问,包外不能访问。被private修饰的字段,只能在本类和伴生对象中访问。被private[this] 修饰的字段,只能在本类中访问,伴生对象中也不能访问。

package clazz

//被private[clazz] 修饰的类,只能在clazz包下访问,包外不能访问
private[clazz] class ClassDemo {
  //val 修饰的字段,只有get,没有set
  val name: String = "小明"
  //var 修饰的字段,既有get,又有set
  var age: Int = 20
  //被private修饰的字段,只能在本类和伴生对象中访问
  private var sex: String = "男"
  //被private[this] 修饰的字段,只能在本类中访问,伴生对象不能访问
  private[this] var tel: String = "188***"

  //提供get和set供外面赋值
  def get() = {
    this.tel
  }
  def set(tel: String) = {
    if (tel.length == 11) {
      this.tel = tel
    } else {
      println("电话号码错误")
    }
  }
}

object ClassDemo {
  //创建对象
  val o1 = new ClassDemo
  o1.sex = "女"
}

scala中构造器

分为两种:
1、主构造器:与类名交织在一起,一个类只能定义一个主构造器。

定义格式:class 类名(主构造器参数) {  }

主构造器参数会成为类的字段。在主构造器参数中,没有被任何关键字修饰的字段,默认被标注为private[this],只能在本类中访问,其他任何地方都不能访问。
主构造器的代码:不包含在任何方法中的代码
2、辅助构造器:可以定义多个,但是辅助构造器的第一行代码必须是调用主构造器

定义格式:def this( 构造器参数) {  }
【注意】:创建对象时,一定是主构造器代码先执行

package clazz

//class ClassDemo_02(var name: String, var age: Int,sex:String),sex字段会被标注为private[this],只能在本类中访问,其他任何地方都不能访问
class ClassDemo_02(var name: String, var age: Int) {
  println("这是主构造器的代码")
  var sex: String = null
  var add: String = null

  //定义一个辅助构造器
  def this(name: String, age: Int, sex: String) {
    //辅助构造器的第一行代码必须是调用主构造器
    this(name, age)
    this.sex = sex
    println("sex=" + sex)
  }
  //可以定义多个辅助构造器
  def this(name: String, age: Int, sex: String, add: String) {
    this(name, age, sex)
    this.add = add
    println("add=" + add)
  }

  println(s"ClassDemo_02($name,$age,$sex,$add)")
  println("主构造器代码先执行!!!")
}

object ClassDemo_02 {
  def main(args: Array[String]): Unit = {
    val o2 = new ClassDemo_02("小明", 12, "男", "北京")
    println("================")
    val o3 = new ClassDemo_02("小明", 12)
  }
}
运行结果:
这是主构造器的代码
ClassDemo_02(小明,12,null,null)
主构造器代码先执行!!!
sex=男
add=北京
================
这是主构造器的代码
ClassDemo_02(小明,12,null,null)
主构造器代码先执行!!!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值