Java继承了字段阴影和JVM?

Java继承了字段阴影和JVM?,jvm,field,bytecode,shadowing,Jvm,Field,Bytecode,Shadowing,JVM规范的一部分是如何通过继承和后续解析来隐藏字段的机制吗?我知道是的,在很多博客帖子和问题中都可以找到。然而,当我实际查看JVM规范时,“隐藏”或“阴影”这两个词不会出现在文档中的任何地方 我这样问是因为我正在编写自己的JVM,并且发现这个字段阴影是字节码/VM的属性,而不仅仅是Java编译器或Java语言的一部分。我想知道在虚拟机级别应该以何种正确、权威的方式实现这一点。JVM的一个(mis?)特性需要在某个地方正式记录下来吗?术语阴影通常指的是一个标识符对另一个标识符的阴影。也就是说,一

JVM规范的一部分是如何通过继承和后续解析来隐藏字段的机制吗?我知道是的,在很多博客帖子和问题中都可以找到。然而,当我实际查看JVM规范时,“隐藏”或“阴影”这两个词不会出现在文档中的任何地方


我这样问是因为我正在编写自己的JVM,并且发现这个字段阴影是字节码/VM的属性,而不仅仅是Java编译器或Java语言的一部分。我想知道在虚拟机级别应该以何种正确、权威的方式实现这一点。JVM的一个(mis?)特性需要在某个地方正式记录下来吗?

术语阴影通常指的是一个标识符对另一个标识符的阴影。也就是说,一个给定的名称可以引用多个变量,因此必须有一种消除歧义的机制。这主要是一个语言级别的构造,因为它包含更多的名称。局部变量名根本不会出现在字节码中,例如作为可选调试信息

从字节码的角度来看,您已经有了对类、名称和描述符的显式引用。唯一的问题是您所描述的字段是否在您指定的类中实际声明,或者它是否继承自它的一个超类


正如您已经发现的,本标准第
5.4.3.2节中解释了字段分辨率。“隐藏”和“隐藏”这两个术语没有使用,因为它们适用于源代码,而不是类文件。

不过我指的是继承字段的隐藏。字段名确实以字节码显示。我发现这一事实是因为我的DIY JVM(它没有处理这种阴影)对于相同的字节码v.s.得到了不同的结果。在真实的JVM上执行它。此外,当我将某种工作继承的字段阴影逻辑拼凑到我的DIY JVM中时,它们开始在我的单元测试中给出相同的结果。我很确定继承的字段阴影是VM必须处理的事情。@Li好的,字段解析的规范在我看来非常简单。您在哪里遇到了问题?您是否有任何规范未能涵盖的代码示例?我想您可能会被这样一个事实弄糊涂:虽然字段是继承的,但它们实际上并不像方法那样被调度。是的,我认为您是对的。我曾假设方法重写将是“默认”行为,而阴影将得到特别提及,但事实证明,是重写得到了特别提及,阴影行为是默认行为