scala protected modifier转换为java类是public
发布时间:2020-12-16 10:05:18 所属栏目:安全 来源:网络整理
导读:在 scala类中,我定义了受保护的字段和受保护的方法: TestProtected.scala: class TestProtected { protected var f = 0 protected def m = 1} 在我看来,它会将受保护的f和m转换为受java保护的字段和方法.但是当我使用jd-gui将TestProtected.class反编译为j
在
scala类中,我定义了受保护的字段和受保护的方法:
TestProtected.scala: class TestProtected { protected var f = 0 protected def m = 1 } 在我看来,它会将受保护的f和m转换为受java保护的字段和方法.但是当我使用jd-gui将TestProtected.class反编译为java文件时,结果超出了我的预期: @ScalaSignature(bytes="...") public class TestProtected { private int f= 0; public int f() { return this.f; } public void f$eq(int x$1) { this.f = x$1; } public int m() { return 1; } } java文件中的f和m是公共的吗? 为什么? 谢谢! 解决方法
首先,Scala受保护与Java保护不同:
Java受保护对于相同的包和子类是可见的,Scala保护仅对子类可见,因此Scala的受保护比Java更受限制. 所以这是由JVM Level访问修饰符与Scala访问修饰符不同引起的,我们知道Scala在JVM上运行,为了在JVM上运行,它需要在JVM中生成兼容的字节码. 还有其他一些例子: private private[this] private[package] 有一些关于Scala Access的参考: Protected and private in Scala become public in Java Scala Access Protected Members (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |