scala中访问控制与方法重写(1)

39 阅读1分钟

private方法

默认情况下,类的属性在可以通过对象.属性名的方式来获取,如果不希望在类的外部被访问,可以用private来修饰。

格式

class 类名{private 属性private 方法}
// private: 私人的,私有的

// private 修饰之后,他就是私有的,在类的外部无法被访问,只能在类的内部被访问
class Student(var name: String, var age: Int) {

    // 私有属性
    private val phoneNum: String = "136×××××"

    // 私有方法
    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
我的个人爱好是隐私信息......136×××××

重写toString

为什么我们在打印类的对象的时候,输出的内容非常不好看?

*如果我们希望改进这一点,可以通过重写toString方法来实现。

使用println来输出对象是,他会自动调用toString方法。

在Scala中,要重写一个方法,你需要使用override关键字。对于toString方法,你可以在你的类中定义它,并使用override来指明这是对父类方法的重写。 *  

定义toString方法

你可以在类的内部直接定义toString方法。这个方法通常不需要任何参数,并且返回一个String类型的结果。

 

override def toString: String = {

    s"Person(name: $name, age: $age)"

  }
目标:让对象被打印的时候,输出信息更有好一些
做法:重写 toString方法

在使用println输出一个对象的时候,它会自动调用toString方法,并输出这个方法的返回值

class Student(var name:String,var age:Int) {
    override def toString: String = s"Student(${name},${age})"
}

def main(args: Array[String]): Unit = {
    val stu1 = new Student("小花",18)
    val stu2 = new Student("小明",19)
    // 打印输出一个对象,输出的信息不友好
    // level02.class03$Student@2133c8f8
    // level02.class03$Student@43a25848
    println(stu1)
    println(stu2)
}
结果
Student(小花,18)
Student(小明,19)