[Scala]protectedなメンバはclassファイルではprotectedではない。
privateなメンバを持つクラスをコンパイルして、どの様なclassファイルが生成されるか調べてみました。
class PrivateClass { private val foo = "foo" private def bar() { println("bar()") } }
$ javap -private PrivateClass Compiled from "Point2D.scala" public class PrivateClass extends java.lang.Object implements scala.ScalaObject{ private final java.lang.String foo; private java.lang.String foo(); private void bar(); public PrivateClass(); }
どちらもprivateです。
では、protectedなメンバの場合はどうなるでしょうか?
class ProtectedClass { protected val foo = "foo" protected def bar() { println("bar()") } }
$ javap -private ProtectedClass Compiled from "Point2D.scala" public class ProtectedClass extends java.lang.Object implements scala.ScalaObject{ private final java.lang.String foo; public java.lang.String foo(); public void bar(); public ProtectedClass(); }
驚くことに、変数はprivateに、メソッドはpublicになりました。
うーむ。
scalaの場合、objectやtraitなどがあるので、protectedのままではうまくいかないのかな?
それでこーなっている???