二、方法重写:让对象打印更友好 ——toString 方法
默认情况下,直接打印 Scala 对象会输出类似xxx@xxxxxx的 “不友好” 信息。通过重写 toString 方法,可以自定义对象的打印格式。
以下是重写 toString 的示例:
package level02
object class03 {
class Student(var name: String, var age: Int) {
// 重写toString方法,自定义对象的打印格式
override def toString: String = s"Student(${name}, ${age})"
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("小花", 18)
val stu2 = new Student("小明", 19)
println(stu1) // 输出:Student(小花, 18)
println(stu2) // 输出:Student(小明, 19)
}
}
- 默认行为:若不重写
toString,打印对象会输出 “类名 + 哈希值”(如level02.class03$Student@2133c8f8)。 - 重写逻辑:用
override关键字重写toString,返回一个包含对象属性的字符串,让打印结果更直观、友好。
三、封装:隐藏细节,暴露接口
封装是面向对象的核心特性之一,通过private修饰符隐藏类的内部细节(如私有变量、私有方法),仅暴露公共方法供外部调用,从而保证数据安全与代码模块化。
以下是体现封装特性的示例:
object kjlkjkl {
class Student(var name: String, var age: Int) {
// 私有变量:仅类内部可访问
private val phoneNum: String = "136xxxxx"
// 私有方法:仅类内部可调用
private def hobby(): Unit = {
println(s"我的个人爱好是隐私信息.....${phoneNum}")
}
// 公共方法:暴露给外部调用
def sayHello(): Unit = {
println(s"我是${name}, 今年${age}")
hobby() // 类内部调用私有方法
}
}
def main(args: Array[String]): Unit = {
val stu = new Student("小花", 18)
stu.sayHello()
/* 输出:
我是小花, 今年18
我的个人爱好是隐私信息.....136xxxxx
*/
}
}
- 私有成员:
phoneNum(私有变量)和hobby()(私有方法)被private修饰,外部代码无法直接访问。 - 公共接口:
sayHello()是公共方法,外部通过它既能获取对象的公开信息(姓名、年龄),又能间接触发内部逻辑(调用私有方法hobby()),实现了 “隐藏细节,暴露必要接口” 的封装思想。