构造器

在scala中定义类用class修饰,这个类默认有一个空的构造器,定义在类的名称后面的构造器为主构造器,类的主构造器中的属性会定义为类的成员比变量,

class Student(name: String, age: Int) {
  var sex: String = _
  //定义一个辅助构造器 def this()
  def this(name: String, age: Int, sex: String) {
    this(name, age)
    this.sex = sex
  }
}

如果主构造器中的属性没有被val或者var修饰的话,不能被使用

属性被val修饰,相当于对外提供了get方法

var 修饰,相当于对外提供了get和set方法

package twodaystudy

class Student(var name: String,var age: Int) {
    //不是成员变量的要声明
  var sex: String _
  //定义一个辅助构造器 def this()
  def this(name: String, age: Int, sex: String) {
    //辅助构造器里面必须调用主构造
    this(name, age)
    this.sex = sex
  }

}

类的访问权限

在构造器前加private 可以表示构造器访问权限

类的成员属性访问权限

如果类的主构造器中成员属性是private修饰的,它的get和set方法都是私有的,外部不能访问

类的构造器访问权限

在构造器钱加修饰权限,private在主构造器之前,说明该类主构造器是私有的,外部类和对象不能访问,也适用于辅助构造器

类的访问权限

类前加private[this],表示在该包下可以使用,子包下不可见

private[包名],表示在包以及子包下都可见

伴生类和伴生对象

对象名和类名相同,伴生对象可以访问伴生类中的私有变量和方法