1

サンプルコードを考えると:

package com.tt;
class Bigger 
{
     int a = 5;
}

class lower extends Bigger 
{
    void m1() {
        int z = super.a;
    }
}

保護されていない場合でも、下位クラスが Bigger クラスの変数にアクセスできるのはなぜですか? 私はこの可視性マトリックスを参照しています

アクセス修飾子:

         Same Class  Same Package   Subclass   Other packages
public          Y       Y              Y             Y               
protected       Y       Y              Y             N
Default         Y       Y              N             N
private         Y       N              N             N
4

2 に答える 2

4

フィールド 'a' のスコープは既定のスコープであるパッケージ プライベートに設定されているため、派生クラスはスーパー タイプlowerのフィールドにアクセスできます。このシナリオでは、継承関係はフィールドへのアクセスに関与しません。aBigger

フィールド宣言にスコープが指定されていない場合、フィールドのアクセス レベルはデフォルトでパッケージ プライベートになります。aこれは、クラスのフィールドの現在のケースですBiggerlowerこれにより、フィールドへのアクセスなど、同じパッケージ内のクラスが許可されます。

テーブル内で、フィールドは次のアクセス レベルに分類されます。

         Same Class  Same Package   Subclass   Other packages
public          Y       Y              Y             Y               
protected       Y       Y              Y             N
Default         Y       Y <-- Here     N             N
private         Y       N              N             N
于 2013-07-24T09:25:13.633 に答える
0

スーパークラス変数が保護モードでない場合は、スーパー キーワードを使用してアクセスできます

Class A{
int a;
}
Class B extends A
{
void apply(int c)
{
super.a=c;
}
}

これにより、クラス A の a の値が設定され、その逆も同様です。変数にアクセスできます.....

于 2013-07-24T09:54:25.300 に答える