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

0

一番近いと思うのは

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

しかし、これは;以上のアクセス権を与えSuperません。他のインスタンスでそのメソッドを呼び出せないようにするだけです。SubSub

Scala ではまったく同じパターンはあり得ません。(JVM ではサポートされていないため、これはコンパイラのフィクションでなければなりませんが、アクセス パターンの多くは既にコンパイラのフィクションです。)

于 2013-07-08T14:57:17.727 に答える