伴生对象
* 语法
* 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("================")
}
}
}