Scala私有访问修饰符范围

时间:2012-04-18 14:37:50

标签: scala

我的代码对象和定义的构造函数的代码是私有的:

class Person private[Person] (var age: Int, var name: String) {
  private[Person] def this(name: String) = this(0, name)
}

private class Employee(age: Int, name: String) extends Person(age, name)

private class Worker(age: Int, name: String) extends Person(age, name)

object Person {
  def prettyPrint(p: Person) = println("name:%s age:%s".format(p.name, p.age))
  def apply(age: Int, name: String) = new Person(age, name)
  def apply() = new Person(0, "undefined")
  def apply(age: Int, name: String, personType: String): Person = {
    if (personType == "worker") new Worker(age, name)
    else if (personType == "employee") new Employee(age, name)
    else new Person(age, name)
   }

}

我的问题是为什么同一个包中的另一个对象也可以访问这个私有构造函数。我添加了私人[this],所以其他人没有访问它,但也没有同伴。我可以只为类和伴随对象提供私有属性吗?

1 个答案:

答案 0 :(得分:1)

此代码无法编译。 EmployeeWorker都尝试访问私有构造函数,并被正确拒绝访问。

你的问题是私有变量,但没有变量被声明为私有。

因此,您的示例不完整,或者不正确。请更正示例,以便我们回答问题。