3

コンパニオン オブジェクトとコンストラクターをプライベートとして定義したコードがあります。

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)
   }

}

私の質問は、同じパッケージ内の別のオブジェクトもこのプライベート コンストラクターにアクセスできる理由です。private[this] を追加したので、他の人はアクセスできませんでしたが、コンパニオンもアクセスできませんでした。クラスとコンパニオン オブジェクトのみにプライベート プロパティを設定できますか?

4

1 に答える 1

1

このコードはコンパイルされません。Employeeとの両方Workerがプライベート コンストラクターにアクセスしようとしましたが、正当にアクセスが拒否されました。

あなたの質問はプライベート変数について語っていますが、プライベートと宣言された変数はありません。

したがって、あなたの例は不完全であるか、正しくありません。質問に答えられるように、例を修正してください。

于 2012-04-18T17:20:03.937 に答える