2017-03-25 10 views
0

次のコードがコンパイルエラーになるのはなぜですか?protected access java issue

public class A 
{  
    protected int _i; 
    public A(int i) 
    { 
     _i=i; 
    } 
    public boolean equals(Object other) 
    { 
     System.out.print("A "); 
     return ((other!=null) && (_i==other._i)); 
    } 
} 

ObjectクラスはAの親、つまり、スーパークラスとサブクラスと考えられています。だからどうすればObjectクラスは保護された変数にアクセスできませんか?

+1

特許は子供から継承していませんが、他の方法で動作します – MadProgrammer

+0

オブジェクトはJavaのスーパークラスです。あなたの場合、スーパークラスのオブジェクトはクラスAの保護されたデータメンバーを使用できません。 – Omore

+0

@Art - あなたが得たすべての回答は同じことを言っています。親子の視認性は一方向に向いています。この[リンク](http://stackoverflow.com/questions/899414/in-java-why-super-class-method-cant-access-protected-or-private-methods-variab)では、なぜその理由が説明されています。 Q:意味がありますか? – paulsm4

答えて

1

これは、すべてのアクセス修飾子についての問題ではありませんあなたは0123を宣言した後も同じエラーが発生します。をpublicとします。

問題は子クラスは親のすべてのメンバーを見ることができますが、親は子のメンバーを見ることはできません。そのため、other._iは無効です。