伴生类和单例对象

创建对象的方式:

    1. class → new
    1. 直接通过object来定义(单例对象,只有一个,孤单) 适用于数据存储,提供一些工具方法,公用方法......
kotlin 复制代码
package level02{

  object class06 {

    object Myschool {
      val name: String = "xxx学校"

      def say(): Unit = {
        println(s"say:${name}")
      }
    }

    def main(args: Array[String]): Unit = {
      // 访问对象的属性
      //println(Myschool.name)
      // 调用对象的方法
      Myschool.say()
    }
  }

}

伴生类和伴生对象

  • 类和对象同名,且在同一文件中,此时,他们互为伴生关系。
  • 特点:可以互相访问对方的私有成员
typescript 复制代码
package level02

object class07 {
    class Student(private val password: String) {
      private def validatePassword(input: String): Boolean = {
        input == password
      }
    }

    object Student {
      def check(stu: Student, pwd: String): Boolean = {
        stu.validatePassword(pwd)
      }
    }

    def main(args: Array[String]): Unit = {
      val stu1 = new Student("12345")
      if (Student.check(stu1, "12345")) {
        println("验证通过")
      }

      // 类外部无法访问私有成员,以下代码会编译错误
      // if (stu1.validatePassword("12345")) {
      //   println("验证通过")
      // }
    }
}

单例模式:一个类(class)只能有一个对象!

  • 步骤:
  1. 不让它new:把构造函数设置为私有的!
  2. 在伴生对象中调用new来生成一个对象;提供一个方法来获取这个对象
kotlin 复制代码
package level02

object class08 {
  // 构造函数私有,外部无法直接new
  class Student private(var name: String, var age: Int) {
  }

  object Student {
    // 伴生对象中创建唯一实例
    private val ins = new Student("小花", 18)
    // 提供获取实例的方法
    def getInstance: Student = ins
  }

  def main(args: Array[String]): Unit = {
    // 外部通过伴生对象的方法获取实例
    val stu1 = Student.getInstance
    val stu2 = Student.getInstance
    // 验证是否为同一个对象
    println(stu1 == stu2)  // 输出true
  }
}
相关推荐
xinyu_Jina10 小时前
PaperStudio:WYSIWYG文档的Web实现——从CSS Print到客户端PDF生成的技术解析
前端·css·pdf
默默学前端10 小时前
html列表标签及css列表属性
前端·css·html5
码事漫谈18 小时前
C++ 多线程开发:从零开始的完整指南
后端
9ilk18 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
码事漫谈18 小时前
十字路口的抉择:B端与C端C++开发者的职业路径全解析
后端
天天扭码19 小时前
如何实现流式输出?一篇文章手把手教你!
前端·aigc·ai编程
提笔了无痕19 小时前
git基本了解、常用基本命令与使用
git·后端
前端 贾公子19 小时前
vue移动端适配方案 === postcss-px-to-viewport
前端·javascript·html
java1234_小锋20 小时前
Spring IoC的实现机制是什么?
java·后端·spring
喵个咪20 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:JWT 集成指南
后端·go