6

保護されたアクセスに関するJLSの詳細から:

保護されたメンバーが宣言されているクラスを C とします。アクセスは、C のサブクラス S の本体内でのみ許可されます。

さらに、Id がインスタンス フィールドまたはインスタンス メソッドを表す場合、次のようになります。

アクセスが修飾名 Q.Id による場合 (Q は ExpressionName)、式 Q の型が S または S のサブクラスである場合にのみアクセスが許可されます。

フィールド アクセス式 E.Id (E はプライマリ式) によるアクセス、またはメソッド呼び出し式 E.Id(. . .) (E はプライマリ式) によるアクセスである場合、アクセスは次の場合にのみ許可されます。 E の型が S または S のサブクラスである場合。

修飾名フィールド アクセス式の違いは何ですか?

4

2 に答える 2

0

式名が Q.Id の形式の場合、Q は既にパッケージ名、型名、または式名として分類されています。

フィールド アクセス式の意味は、修飾名と同じルールを使用して決定されますが、式がパッケージ、クラス タイプ、またはインターフェイス タイプを示すことができないという事実によって制限されます。

オラクルのウェブサイトで上記のテキストを見つけました。

簡単に言えば:

  1. 修飾名とは、宣言で親情報を運ぶことを意味します。例: Pack1.Pack2.Pack3.Class1 & Pack1.Pack2.Pack4.Class2

Pack4では、Pack3.Class1またはPack2.Pack3.Class1またはPack1.Pack2.Pack3.Class1のいずれかの方法で Class1にアクセスできます。最後の方法は完全修飾名になります。

  1. フィールドアクセス式は修飾名のサブタイプですが、名前の通りフィールドアクセス用です

そのため、修飾名はパッケージ、クラス、インターフェイスを参照できますが、フィールドは参照できませんが、フィールド アクセス式はフィールドのみを参照します。

参照: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.11 http://docs.oracle.com/javase/specs/jls/se7/html /jls-6.html#jls-6.5.6.2

于 2013-03-12T07:10:39.463 に答える