java – scala中受保护的方法如何在jvm上工作

我是
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而言它是公开的).

点赞