2017-05-25 21 views
1

"obj = new Test()"はスーパークラスの保護された整数にアクセスできませんが、 "Test obj = new Test()"がアクセスを許可する理由はまだ分かりません。保護されたメンバの継承

Acc obj = new Test(); < - 保護された整数へのアクセスなし

テストobj =新しいテスト(); < - 保護された整数にアクセスも

package p1; 
public class Acc { 
int p; 
private int q; 
[b]protected int r;[/b] 
public int s; 
} 

package p2; 
import p1.Acc; 
public class Test extends Acc { 
    public static void main(String[] args) { 
     // insert LINE 
    } 
} 
+1

ご協力ありがとうございました –

+0

正確にどこに 'r'にアクセスしようとしているのか、どのようなエラーが表示されているのかを示してください。 – Thilo

答えて

1

Javaは唯一のサブクラスは、それは「実装の責任」であれば、異なるパッケージ内にある保護されたメンバーにアクセスすることを可能にするYES ....すなわち、 IS-Aのサブクラスを決定できるかどうかを判定します。スーパークラス参照を使用しているときに、保護されたメンバーにアクセスする場合は、最初にキャストする必要があります。

関連する問題