oop - 为什么我不能访问 Scala 中类的伴随对象中的私有(private)类方法?

标签 oop scala private-methods

我正在为我的面向对象设计课做家庭作业,并且在使用 Scala 的伴随对象时遇到了麻烦。我在一些地方读到伴随对象应该可以访问它们的伴随类的私有(private)方法,但我似乎无法让它工作。 (作为说明,任务的重点与实现二叉搜索树有关,所以我不只是在寻求答案......)

我有一个对象应该创建我的私有(private)类的实例,BstAtlas(Bst 也在 Atlas 对象中定义,为清楚起见将其取出):

object Atlas {                                             
  def focusRoom(newRoom:Room,a:Atlas):Atlas = a.helpFocusRoom(newRoom);

  abstract class Atlas {
    ...
    protected def helpFocusRoom(n:Room):Atlas;
    ...
  }

  private class BstAtlas(bst:Bst) extends Atlas {
    ...
    protected def helpFocusRoom(newRoom:Room):Atlas = ...
       // uses some of bst's methods
    ...
  }
}

但是当我去编译时,我得到以下错误:

Question23.scala:15: error: method helpFocusRoom cannot be accessed in Atlas.Atlas a.helpFocusRoom(newRoom);



函数 helpFocusRoom 需要隐藏,但我不知道如何隐藏它并且仍然可以在伴随对象内部访问它。

谁能告诉我我在这里做错了什么?

最佳答案

问题是类和伴生对象不能像那样嵌套。要定义伴随对象,您需要在对象主体之外但在同一个文件中定义类。

关于oop - 为什么我不能访问 Scala 中类的伴随对象中的私有(private)类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4045949/

相关文章:

scala - 如何将代码块传递给函数?

c# - 将参数传递给 PrivateObject 方法

javascript - 从 JavaScript 中的私有(private)方法访问成员变量

c++ - 一个类在 C++ 中只包含(默认情况下)私有(private)成员有什么用处?

oop - 是否存在确定方法或字段是否属于类的启发式方法?

PHP类封装选项

PHPExcel : Data validation not working in . xls 格式

scala - 如何在 Play 2.4 和 `controllers.Default.redirect` 中使用 `InjectedRoutesGenerator`

scala - val 和 def 引用的函数文字

c++ - 定义 operator<< 内部类