1. 伴生类的定义
- 定义:在 Scala 中,若一个类和一个同名的单例对象在同一个源文件中定义,这个类就称为该单例对象的伴生类,对应的单例对象称为该类的伴生对象。
格式:
csharp
object 对象名{
属性
方法
}
(二)伴生类和伴生对象
当同名的类和单例对象在同一个源码文件时,这个类称为单例对象的伴生类,对象称为类的伴生对象。 实例:
kotlin
体验AI代码助手
代码解读
复制代码
object Person {
}
class Person{
}
说明: 1. 类名和对象名必须同名。
2. 必须在同一个源码文件中。
[编码示例] :访问私有方法:
typescript
class User (val username: String, private val password: String) {
// 伴生类的私有方法
private def validatePassword(input: String): Boolean = {
input == password
}
}
object User{
def check(u: User, pwd: String):Boolean = {
u.validatePassword(pwd)
}
}
object Test {
def main(args: Array[String]): Unit = { // 入口函数
var u1 = new User("小明", "123456")
print(User.check(u1, "123456"))
}
}
2. 伴生类的作用和格式
-
作用:
- 伴生类和伴生对象可以相互访问对方的私有成员(包括私有构造方法、私有属性、私有方法等)。
- 可以将与类相关的工具方法、工厂方法等放在伴生对象中,使代码组织更合理。
格式:
arduino
// 伴生类
class Person(private val name: String, private val age: Int) {
def sayHello(): Unit = {
println(s"Hello, I'm ${name}, ${age} years old.")
}
}
// 伴生对象(与Person类同名,在同一源文件中)
object Person {
// 工厂方法,用于创建Person对象
def apply(name: String, age: Int): Person = new Person(name, age)
// 可以访问伴生类的私有成员,这里演示访问私有构造
def createAnonymous: Person = new Person("Anonymous", 0)
}
3. 单例对象的定义
- 定义:通过
object关键字定义的对象,在程序运行中仅实例化一次,属于单例模式的实现。
4. 单例对象的作用和格式
-
作用:
- 作为程序入口(
main方法需定义在单例对象中)。 - 实现工具类,封装通用方法(如字符串处理、数学计算)。
- 实现单例模式,保证全局唯一实例。
- 作为伴生对象,与伴生类协作。
- 作为程序入口(
-
格式:
typescript
// 工具类形式的单例对象
object StringUtil {
def isEmpty(s: String): Boolean = s == null || s.trim.isEmpty
def reverse(s: String): String = s.reverse
}
// 程序入口形式的单例对象
object AppEntry {
def main(args: Array[String]): Unit = {
println("Program starts here!")
val isEmpty = StringUtil.isEmpty(" ")
println(s"Is empty? $isEmpty")
}
}