Scala中访问控制与方法重写(一)

56 阅读1分钟

private

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

private: 私人的,私有的

private 修饰之后,它就是私有的,在类的外部无法被访问。只能在类的内部被访问。

private格式

class 类名{

private 属性

private 方法

}
object class02 {
  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 = {
    // 实例化类的对象 stu
    // new 的时候,就会自动调用一次构造函数
    val stu = new Student("小花", 18)
    stu.sayHello()
  }
}

判断类和对象的关系

 当我们拿到一个对象时,如何知道它所属的类呢?

方法1: 对象.getClass()

方法2:对象.isInstanceof[类]

重写toStiring

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

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

定义toString方法

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

object class03 {
  //目标:让对象被打印的时候,输出信息更友好一些

  //做法:重写 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("小花", 18)
    // 打印输出一个对象
    // level02.class03$Student@2133c8f8
    // level02.class03$Student@43a25848
    println(stu1)
    println(stu2)
  }
}

输出结果

Student(小花, 18)
Student(小花, 19)