📅  最后修改于: 2023-12-03 15:37:31.083000             🧑  作者: Mango
在 Scala 中,可以使用关键字 private
和 protected
来控制方法的访问范围。这两个关键字都是面向对象编程中的访问控制关键字,可以限制方法的访问权限,增加代码的安全性和可维护性。
private
访问控制在 Scala 中,使用 private
关键字可以将方法的访问权限限制在定义该方法的类或对象的作用域之内,其他类或对象无法访问该方法。示例如下:
class MyClass {
private def myPrivateMethod(): Unit = {
println("This is a private method.")
}
def callMyPrivateMethod(): Unit = {
myPrivateMethod()
}
}
val myClass = new MyClass()
myClass.callMyPrivateMethod() // Output: This is a private method.
myClass.myPrivateMethod() // This line will not compile because myPrivateMethod is private to MyClass.
在上面的示例中,myPrivateMethod
是一个私有方法,只能在 MyClass
内部被访问。而 callMyPrivateMethod
是公共方法,任何对象都可以调用它,它内部调用了 myPrivateMethod
。
protected
访问控制与 private
不同,protected
关键字可以将方法的访问权限限制在定义该方法的类或对象以及它的子类中,其他类或对象无法访问该方法。示例如下:
class MyBaseClass {
protected def myProtectedMethod(): Unit = {
println("This is a protected method.")
}
}
class MySubClass extends MyBaseClass {
def callMyProtectedMethod(): Unit = {
myProtectedMethod()
}
}
val mySubClass = new MySubClass()
mySubClass.callMyProtectedMethod() // Output: This is a protected method.
mySubClass.myProtectedMethod() // This line will not compile because myProtectedMethod is protected to MyBaseClass and its subclasses.
在上面的示例中,myProtectedMethod
是一个受保护的方法,只能在 MyBaseClass
或它的子类中被访问。而 callMyProtectedMethod
是公共方法,它调用了 myProtectedMethod
。
需要注意的是,Scala 中的 protected
与 Java 中的有一些不同。在 Scala 中,如果子类和父类位于同一包中,子类可以访问父类中的 protected
方法。与此不同的是,Java 中当子类和父类在同一个包中时,子类不能访问父类中的 protected
方法。这是因为 Scala 中的访问修饰符是基于类而不是基于包的。
在 Scala 中,可以使用 private
和 protected
关键字来控制方法的访问权限。private
将方法的访问范围限制在类或对象的作用域之内,而 protected
将方法的访问范围限制在类或对象以及它的子类中。这些访问控制关键字可以增加代码的安全性和可维护性,建议在编写代码时加以使用。