C ++ - Scala中的私有访问?

时间:2013-07-08 11:47:45

标签: c++ scala

在C ++中,人们可以拥有(请原谅我的错误,因为我有一段时间没有完成C ++,并且感谢您的修正):

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

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

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

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

2 个答案:

答案 0 :(得分:2)

如果你这样尝试

abstract class Super {
  private def g()

  def f() {
    g()
  }
}

编译器会给你这个错误信息:

  

scala:抽象成员可能没有私有修饰符
    private def g()

您必须至少g()声明protected

答案 1 :(得分: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;它只是阻止{{1}}在其他实例上调用该方法。

Scala中无法使用完全相同的模式。 (它必须是编译器小说,因为JVM不支持它,但许多访问模式已经是编译器小说。)