Scala 学习(七)--- 类

A. 类的定义

  1. Scala中,类并不用声明为public

  2. Scala源文件中可以包含多个类,所有这些类都具有公有可见性

  3. val修饰的变量具有只读属性,有getter但没有setter方法,相当于java中的final修饰的变量

  4. var修饰的变量既有getter,又有setter方法

  5. 类私有字段,即private修饰的变量,只能够在类的内部以及伴生对象中使用

  6. 对象私有字段,即private[this]修饰的变量,访问权限更加严格,只能在类的内部中使用
class Person {
  val id = "9527" //用val修饰的变量是只读属性,有getter但没有setter,相当于java中的final修饰的变量
  var age = 18 //用var修饰的变量既有getter又有setter
  private var name = "唐伯虎" //类私有字段,只能在类的内部以及伴生对象中使用
  private[this] val pet = "小强" //对象私有字段,访问权限更加严格,只能在类的内部方法中使用
  def printPet: Unit = {
    print(pet)
  }
}
object Person {
  def main(args: Array[String]): Unit = {
    val p = new Person
    println(p.id + " " + p.age + " " + p.name)
    p.age = 20
    p.name = "祝枝山"
    println(p.id + " " + p.age + " " + p.name)
    p.printPet
  }
}

B. 构造器

  1. 主构造器会执行类定义中的所有语句,如果有函数,函数仅仅被加载,并函数不会被执行

  2. 每个类都有主构造器,主构造器中的参数直接放在类名后面,与类交织在一起

class Animal(val id: String, var name: String) {
  println("id: " + id + ", name: " + name) //主构造器会执行类定义中的所有语句
  def sayHi(): Unit = { //函数仅仅被加载,不会被执行,除非被调用
    println("hi..." + name)
  }
}
object Animal {
  def main(args: Array[String]): Unit = {
    val a = new Animal("01", "dog")
  }
}

这里写图片描述

3. 主构造器中参数如果不带有val,var修饰,则该参数为对象私有化字段,等同于private[this] val修饰的字段

4. 辅助构造器中参数不能用val, var修饰

5. 先调用主构造器,再调用辅助构造器,意味着每次先执行类中定义的所有语句,再执行辅助构造器
class Animal(val id: String, var name: String, gender: String) {
  print("id: " + id + ", name: " + name + ", ") //主构造器会执行类定义中的所有语句
  println("gender: " + gender) //只能在类中访问gender
//  gender = "f" //报错,Reassignment to val:说明gender被val修饰
  var age: Int = -1
  def this(id: String, name: String, gender: String, age: Int) {
    this(id, name, gender)
    this.age = age
    println("age: " + age)
  }
  println("age: " + age)
}
object Animal {
  def main(args: Array[String]): Unit = {
    val a = new Animal("01", "dog", "m")
    val a2 = new Animal("02", "cat", "f", 2) //先调主构造器,再调辅助构造器,导致每次都能将age输出为-1
//    a.gender //报错,Cannot resolve symbol gender:伴生对象都不能访问,说明gender被private[this]修饰
  }
}

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值