3

在 C++ 中,可以有(请原谅错误,因为我有一段时间没有使用 C++ 并且感谢更正):

class Super {
    private: virtual void g() = 0;
    public: void f() {
        g();
    }
};

class Sub: public Super {
    private: virtual void g() {
    }
};

这样Sub定义g但不能直接调用它。

在 Scala 中可以做同样的事情吗?

4

2 回答 2

2

If you try it like this

abstract class Super {
  private def g()

  def f() {
    g()
  }
}

the compiler will give you this error messge:

scala: abstract member may not have private modifier
private def g()

You have to declare g() at least protected.

于 2013-07-08T12:27:58.583 回答
0

我认为最接近的是

abstract class Super {
  protected[this] def g: Int
  def f { println(g) }
}
class Sub extends Super {
  protected[this] def g = 5
}

但这并没有提供Super比;更多的访问权限。Sub它只是防止Sub在其他实例上调用该方法。

完全相同的模式在 Scala 中是不可能的。(它必须是编译器虚构的,因为 JVM 不支持它,但许多访问模式已经是编译器虚构的。)

于 2013-07-08T14:57:17.727 回答