构造函数

19 阅读1分钟
  • var 修饰的属性是可以被修改的
  • val 修饰属性是只读的,不能被修改
package leve02
  class Student(var name:String,val age:Int) {
    def sayHi():Unit = {
      println(s"我是${name},我今年${age}")
    }
  }
object Class01 {
    def main(args: Array[String]): Unit = {
      val stu1 = new Student("小花", 18)
      stu1.sayHi()
      stu1.name="小花花"
      stu1.sayHi()
    }
  }

Student() 构造函数(构造器),用来创建对象

  1. 主构造函数 class Student()
  2. 辅助构造函数,提供更多的方式来创建对象

辅助构造函数特点

  1. 名字就是this
  2. 第一句代码就是调用主构造器
package leve02

class Student(var name:String,val age:Int) {
      println("Student......")
    def this() = {
      this("未知的",18)
      println("辅助构造器被调用了...")
    }
  def this(age:Int) = {
    this("未知的",age)
  }
  def sayHi():Unit = {
    println(s"我是${name},我今年${age}")
  }
  }
object Class02 {
    def main(args: Array[String]): Unit = {
      val stu1 = new Student1("小花", 18)
      val stu2 = new Student1()
      val stu3 = new Student1(20)
      stu1.sayHi()
      stu1.name="小花花"
      stu1.sayHi()
    }
  }

private:私有的。不对外公布,不对外发布,在外面不可以访问。在家之外的地方,不可以被别人知道...

package leve02

object Class03 {
  class Student(val name:String,val age:Int) {
    private val hobbies:String = "躲在被子,打手电看恐怖小说"
    private def hobby():Unit = {
      println(s"${hobbies}")
    }
    def sayHi():Unit = {
      println(s"${name},${age}")
      hobby()
    }
  }
  def main(args:Array[String]):Unit = {
    val stu = new Student("小花",18)
    stu.sayHi()
  }
}

hobby()在类的内部,可以调用私有方法 println(stu.hobbies) stu.hobby()在类的外部,无法访问私有属性

package leve02

object Class04 {
  class Student(){}
  class Teacher(){}
  def main(args:Array[String]):Unit = {
    val age:Int = 1
    val stu = new Student()
    println(stu.getClass)
    println(age.getClass)
    println(stu.isInstanceOf[Student])
    println(stu.isInstanceOf[Teacher])
  }
}