【Scala】通过简洁代码搞明白伴生关系、主构造器和辅助构造器的关系

601-赵同学

发表文章数:191

首页 » 大数据 » 正文

/**
 * 主构造器直接定义在类名称的后面,参数列表和类名写在一起
 * 主构造器的参数会自动提升为对象的属性,不需要在对象中重新定义一遍
 */
class Student(val id: Int, name: String) {
  println("主构造器开始执行")

  //Student类的私有属性
  private val city = "beijing"

  //调用object Student的私有属性
  def events() = println(Student.job + "在" + city)

  var hobby: String = "basketball"

  def sayHello = println("hello")

  println("主构造器执行结束")

  // 辅助构造器
  def this(id: Int, name: String, hobby: String) {
    //todo 辅助器的第一行必须调用主构造器或者其他已经存在的辅助构造器
    this(id, name)
    this.hobby = hobby
  }

}

/**
 * 如果有一个class文件,还有一个与class同名的object文件,那么就称这个object是class的伴生对象,class是object的伴生类
 * 所以这里class Student就是object Student的伴生类,object Student就是class Student的伴生对象
 */
object Student {
  //object Student的私有属性
  private val job = "秃头侠"

  def main(args: Array[String]): Unit = {
    val zhangsan = new Student(1, "zhangsan")
    zhangsan.sayHello
    println("===============================")
    val lisi = new Student(2, "lisi", "PC-Game")
    lisi.sayHello
    println("lisi的id为" + lisi.id + ",lisi的hobby为" + lisi.hobby)
    println("===============================")

    /**
     * 1.伴生类和伴生对象必须存放在一个.scala文件中
     * 2.伴生类和伴生对象的最大特点就是可以相互访问
     */
    //调用class Student的私有属性
    val student = new Student(3, "一拳超人")
    student.events()
    println(student.city + "有" + job)
  }
}
控制台输出结果:

主构造器开始执行
主构造器执行结束
hello
===============================
主构造器开始执行
主构造器执行结束
hello
lisi的id为2,lisi的hobby为PC-Game
===============================
主构造器开始执行
主构造器执行结束
秃头侠在beijing
beijing有秃头侠

未经允许不得转载:作者:601-赵同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《【Scala】通过简洁代码搞明白伴生关系、主构造器和辅助构造器的关系》 发布于2020-04-10

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录