zoukankan      html  css  js  c++  java
  • 【Scala】通过简洁代码搞明白伴生关系、主构造器和辅助构造器的关系

    /**
     * 主构造器直接定义在类名称的后面,参数列表和类名写在一起
     * 主构造器的参数会自动提升为对象的属性,不需要在对象中重新定义一遍
     */
    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有秃头侠
    
  • 相关阅读:
    LeetCode 476 数字的补数
    MySQL与Java 整型数据映射
    TINYINT[M]、INT[M]和BIGINT[M]中M值的意义
    git删除本地分支
    git 初始化项目、创建本地分支、本地分支与远程分支关联
    Java 当文件不存在时自动创建文件目录和文件
    Java 在文件末尾追加内容
    免密自动登陆SAPGui
    SAP GUI770下载及安装
    notepad++格式化json,无法安装json插件
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772405.html
Copyright © 2011-2022 走看看