scala中访问控制与方法重写

35 阅读1分钟

1. private关键字

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

构造参数被声明为 private val,表示属性仅在类内部可访问,外部无法直接读取(如注释中的 stu1.name 会编译报错)。

格式:


class 类名{

private 属性

private 方法

}
class Student(){

  private val name:String;

}

object Test{

  def main(args: Array[String]): Unit = {

    val s = new Stuent()  
s.name // 错误~~~~

  }

}

2. override toString

重写后通过自定义格式返回对象信息,方便打印和调试。

(二)判断类和对象的关系

方法1: 对象.getClass()

方法2:对象.isInstanceof

println("s".getClass())  
println(p1.isInstanceof[Person])

(三)重写toString

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

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

  1. 定义toString方法

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

override def toString: String = {

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

  }

3. equeals

基于 name 和 id 判断相等性(忽略 age),利用 Scala 类级别的私有性,同类对象可直接访问彼此的私有属性。

(四)判断两个对象是相等的?

两个对象做比较==时,会自动调用equals方法。我们可以重写equals方法,并自己定义两个对象相等的标准。

如何判断两个对象在业务上是相等的?

重写equals方法的语法格式:

override def equals(obj: Any): Boolean = {

     true/false  
if (obj == null || obj.getClass != this.getClass) return false

    // 类型转换和字段比较

    val other = obj.asInstanceOf[Student]

    (this.ID == other.ID) && (this.name == other.name)

}