gpt4 book ai didi

java - scala 中的 protected 方法如何在 jvm 上工作

转载 作者:搜寻专家 更新时间:2023-11-01 03:21:45 27 4
gpt4 key购买 nike

我是 Scala 的新手。我读到 Scala 的 protected 关键字与 Java 中的 protected 不同。当我看到为 Scala 和 java 中的公共(public)类的 protected 方法生成的字节码时,我发现如下:

斯卡拉代码:

package com.test 
class Vehicle {
protected def ignite() {
println("Ignition.....")
}
}

当我使用javap反编译时,显示如下代码:

public class com.test.Vehicle {
public void ignite();
public com.test.Vehicle();
}

还有 flags: ACC_PUBLIC 在 Scala 方法 ignite 的描述符中设置。

等效的 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();
}

还有 flags: ACC_PROTECTED 在 Java 方法 ignite 的描述符中设置。

但它仍然给出了与 JAVA 不同的行为。

JVM是怎么处理这个东西的?

注意:我对 JVM 规范了解不深。

最佳答案

Scala protected(以及不直接对应于任何 JVM 限定符的其他限定符)根本不由 JVM 处理;它仅由 Scala 编译器强制执行,并且仅适用于 Scala,因此任何其他语言都可以访问此方法(因为就 JVM 而言,它是public)。

关于java - scala 中的 protected 方法如何在 jvm 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28815982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com