类
package com.zy.scala.cls /** * 在 Scala 中,类并不用声明为 public 类型的。 * Scala 源文件中可以包含多个类,所有这些类都具有共有可见性。 */ class Person { //用 val 修饰的变量是可读属性,有 getter 但没有 setter(相当与 Java 中用 final 修饰的变量) val id = "9527" //用 var 修饰的变量都既有 getter,又有 setter var age: Int = 18 //类私有字段,只能在类的内部使用或者伴生对象中访问 private var name: String = "唐伯虎" //类私有字段,访问权限更加严格的,该字段在当前类中被访问 //在伴生对象里面也不可以访问 private[this] var pet = "小强" } //伴生对象(这个名字和类名相同,叫伴生对象) object Person { def main(args: Array[String]): Unit = { val p = new Person //如果是下面的修改,发现下面有红线,说明 val 类型的不支持重新赋值,但是可以获取到值 //p.id = "123" println(p.id) //打印 age println(p.age) //打印 name,伴生对象中可以在访问 private 变量 println(p.name) //由于 pet 字段用 private[this]修饰,伴生对象中访问不到 pet 变量 //p.pet(访问不到) } }
构造器
package com.zy.scala.cls /** * 每个类都有主构造器,主构造器的参数直接放置类名后面,与类交织在一起 */ class Student(val name: String, var age: Int) { //主构造器会执行类定义的所有语句 println("执行主构造器") private var gender = "male" def this(name: String, age: Int, gender: String) { //每个辅助构造器执行必须以主构造器或者其他辅助构造器的调用开始 this(name, age) println("执行辅助构造器") this.gender = gender } } object Student { def main(args: Array[String]): Unit = { val s1 = new Student("zhangsan", 20) val s2 = new Student("zhangsan", 20, "female") } }