我是
Scala的新手.我读到
Scala的protected关键字与
Java中的protected不同.当我看到为Scala和java中的公共类的受保护方法生成的字节代码时,我发现如下:
Scala代码:
package com.test
class Vehicle {
protected def ignite() {
println("Ignition.....")
}
}
当我使用javap反编译时,它显示以下代码:
public class com.test.Vehicle {
public void ignite();
public com.test.Vehicle();
}
还有标志:ACC_PUBLIC在Scala的方法点燃器的描述符中设置.
等效的Java代码:
package com.test;
public class Vehicle {
protected void ignite() {
System.out.println("Ignition.....");
}
}
和解编码:
public class com.test.Vehicle {
public com.test.Vehicle();
protected void ignite();
}
还有标志:ACC_PROTECTED在Java的方法点燃器的描述符中设置.
但它仍然给出了与JAVA不同的行为.
JVM如何处理这个问题?
注意:我不了解JVM规范.
最佳答案 Scala受保护(以及其他不直接对应任何JVM限定符的限定符)根本不由JVM处理;它仅由Scala编译器强制执行,仅适用于Scala,因此任何其他语言都可以访问此方法(因为就JVM而言它是公开的).