0

フィールドが継承によってシャドウ/非表示になり、後でJVM仕様の一部として解決されるメカニズムはありますか? これはJava 仕様の一部であり、多くのブログ投稿や SO の質問で見つけることができます。しかし、実際にフィールド解像度の JVM 仕様を見てみると、JVM 仕様のpdf のどこにも「隠蔽」または「シャドウイング」という言葉は現れません。

私は自分自身の JVM を作成していて、このフィールド シャドウイングがバイトコード/VM のプロパティであり、Java コンパイラまたは Java-the-language の一部ではないことを発見したため、これを尋ねます。これを VM レベルで実装する適切で信頼できる方法を知りたいです。この重要な JVM の (誤った?) 機能は、どこかに正式に文書化する必要がありますか?

4

1 に答える 1

0

シャドウイングという用語は通常、ある識別子が別の識別子をシャドウすることを指します。つまり、与えられた名前は複数の変数を参照する可能性があるため、あいまいさを解消するメカニズムが必要です。これは、より多くの名前が含まれているため、ほとんどが言語レベルの構造です。ローカル変数名は、オプションのデバッグ情報などを除いて、バイトコードにはまったく表示されません。

バイトコードの観点からは、クラス、名前、および記述子への明示的な参照が既にあります。唯一の問題は、記述しているフィールドが指定したクラスで実際に宣言されているかどうか、またはそのスーパークラスの 1 つから継承されているかどうかです。

すでに発見したように、フィールド解像度は5.4.3.2標準のセクションで説明されています。隠蔽およびシャドウイングという用語は、クラスファイルではなくソース コードに適用されるため、使用されません。

于 2013-03-23T03:02:02.193 に答える