Scala 学习(七)--- 类

来源:互联网 发布:java 泛型类 编辑:程序博客网 时间:2024/05/16 06:34

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 0
原创粉丝点击