37_面向对象_伴生对象

伴生对象
* 语法
* object 对象名称 { 对象属性 }
* 说明
* 1. 类名.属性 / 类名.方法
* scala是完全面向对象,所有不能像java一样,定义静态属性
* 可以将属性定义伴生对象中,来模拟 java的静态属性
* 2. 伴生对象 是它伴生类的 单例对象,全局唯一一份
用private修饰主构造器
* 语法
* class 类名 private(参数列表) { 成员 }
* 用处
* 无法使用new 类名来创建对象
使用 对象名() 来创建对象
* 语法
* var obj = 对象名()
* 说明
* 这种方式是调用了伴生对象的apply方法
伴生对象的apply方法
* 说明
* 1. 伴生对象() = 伴生对象().apply()
复制代码
/**
  * @author gaocun
  * @create 2021-10-25 4:56 PM */
object 伴生对象_11 {
  /*
  * 伴生对象
  *    语法
  *       object 对象名称 { 对象属性 }
  *    说明
  *       1. 类名.属性 /  类名.方法
  *         scala是完全面向对象,所有不能像java一样,定义静态属性
  *            可以将属性定义伴生对象中,来模拟 java的静态属性
  *       2. 伴生对象 是它伴生类的 单例对象,全局唯一一份
  * 用private修饰主构造器
  *    语法
  *       class 类名 private(参数列表) { 成员 }
  *    用处
  *        无法使用new 类名来创建对象
  * 使用 对象名() 来创建对象
  *    语法
  *        var obj = 对象名()
  *    说明
  *       这种方式是调用了伴生对象的apply方法
  * 伴生对象的apply方法
  *    说明
  *       1. 伴生对象() = 伴生对象().apply()
  *
  * */

}

package Outer11 {


  // 定义伴生对象
  object BsClass {
    var id = 10
    var name = "大王"

    println("BsClass - 主构造器")
  }

  // 定义类 (主构造器被private修饰)
  class PriClass private {
    var id = 10
    var name = "PriClass"
    println("PriClass - 的主构造器")
  }

  // 通过伴生对象 的apply方法,来创建对象
  object PriClass {
    def apply: PriClass = new PriClass()

    def apply(id: Int): Int = id
  }

  // 类的 apply 方法
  class AppClass {
    def apply: AppClass = new AppClass()
  }

  // 测试对象
  object test {
    def main(args: Array[String]): Unit = {
      var obj = BsClass;
      var obj1 = BsClass;
      println(obj)
      println(obj1)
      println(BsClass.id)
      println(BsClass.name)
      println("================")
      // var obj2 = new PriClass()
      // Error:(63, 18) constructor PriClass in class PriClass cannot be accessed in object test from object test in package Outer11
      var obj2 = PriClass // 等价 PriClass.apply
      var obj3 = PriClass.apply
      var obj4 = PriClass.apply
      println(obj2)
      println(obj3)
      println(obj4)
      var id = PriClass(10)
      println(id)
      println("================")

    }

  }


}
复制代码

 


posted @   学而不思则罔!  阅读(50)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示