
image.png
object Companion {
// 伴生类 和 伴生对象
// 1、class和object在同一个scala文件中
// 2、class和object要同名
// 特征:
// 1、伴生类和伴生对象可互访私有成员
// 2、伴生对象 的apply方法,可简化 伴生类之对象 的创建
// 感性认识:
// class里面的全是 非静态的,object里面的全是 静态的
def main(args: Array[String]): Unit = {
val person = new Person
// print(person.name)
// print(person.age)
println(Person.param)
// Person.add()
println(person.sum(11, 22))
Person.printAge
val p1: Person = Person.apply()
val p2: Person = Person() // 相当于 Person.apply()
}
}
//伴生类
class Person {
val name = "Jacky"
private val age = 20
// 访问伴生对象的私有方法
def sum(x: Int, y: Int) = Person.add(x, y)
}
//伴生对象
object Person {
val param = "100"
private def add(x: Int, y: Int) = x + y
// 通过 伴生对象,访问 伴生类 的私有成员 时,必须要有 伴生类的对象
def printAge = println(s"age=${new Person().age}")
def apply(): Person = new Person()
}

image.png
Person带有参构造方法(上文系无参构造方法):

image.png
object Companion {
// 伴生类 和 伴生对象
// 1、class和object在同一个scala文件中
// 2、class和object要同名
// 特征:
// 1、伴生类和伴生对象可互访私有成员
// 2、伴生对象 的apply方法,可简化 伴生类之对象 的创建
// 感性认识:
// class里面的全是 非静态的,object里面的全是 静态的
def main(args: Array[String]): Unit = {
val person = new Person("东莞", "MALE")
// print(person.name)
// print(person.age)
println(Person.param)
// Person.add()
println(person.sum(11, 22))
Person.printAge
val p1: Person = Person.apply("HZ", "M")
val p2: Person = Person("SG", "F") // 相当于 Person.apply()
println(p1.address + "~" + p1.sex)
println(p2.address + "~" + p2.sex)
val p = Person("FS", "MALE")
println(p.address + "~" + p.sex)
Array(1, 2, 3, 4)
List(1, 2, 3, 4)
}
}
//伴生类
class Person(val address: String, val sex: String) {
val name = "Jacky"
private val age = 20
// 访问伴生对象的私有方法
def sum(x: Int, y: Int) = Person.add(x, y)
}
//伴生对象
object Person {
val param = "100"
private def add(x: Int, y: Int) = x + y
// 通过 伴生对象,访问 伴生类 的私有成员 时,必须要有 伴生类的对象
def printAge = println(s"age=${new Person("SZ", "男").age}")
def apply(address: String, sex: String): Person = new Person(address, sex)
}