2017-09-05 10 views
0

私はJavaで2つのクラスを持っています:FistクラスはPersonクラスを拡張しています。私は変数eyecolorPersonに持っています。これはプライベートであり、私はパブリックセッターとゲッターを持っています。説明が必要です:Javaのプライベートアクセス修飾子

私はFistクラスでそれを拡張すると変数を設定することができますし、取得することもできます。

私の質問は、eyecolorがクラスPersonのプライベートメンバーの場合、プライベートメンバーを使用する際にエラーが発生しないのはなぜですか?このコードはなぜ機能していますか? eyecolorデータメンバは継承されていますか?

人クラス

package lets_start; 

public class Person { 
    private String eyecolor; 

    public String getEyecolor() { 
     return eyecolor; 
    } 

    public void setEyecolor(String eyecolor) { 
     this.eyecolor = eyecolor; 
    } 
} 

拳クラス

package lets_start; 

public class Fist extends Person { 
    public static void main(String[] args) { 
     Fist f = new Fist(); 
     f.setEyecolor("Brown"); 
     System.out.println(f.getEyecolor()); 
    } 
} 

出力:

Brown

+0

を。 – Carcigenicate

+0

あなたの質問は何ですか。 – Ravi

+0

'Fist'はパブリックゲッターとセッターメソッドを継承します。 _プライベートフィールドは 'Person'クラスのみでアクセスされます。フィールド 'eyecolor'に直接アクセスしようとする' Fist'クラスのメソッドを作ると、コンパイルされません。 – Fildor

答えて

1

のいずれか、子クラスから/編集してアクセスフィールドprotected/package-privateを作るか、または使用するにはゲッター/セッターはPersonで定義しました。

あなたはPersonから継承されpublicゲッター/セッターを介してアクセスするのでhttps://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html


why I be able to access it from its child classam not getting an error of using a private member? Why is this code working? Is the eyecolor data member get's inherited?

を参照してください。 eyecolorフィールドは継承されません。getter/setterは継承されません。

不明な点がある場合は、質問やコメントを自由に編集してください。

0

あなたはプライベートメンバーにアクセスしていません。パブリックメソッドにアクセスしています。プライベートメンバへのアクセス

は、次のようになりますと、コンパイル時エラーが作成されます:公共ゲッター `getEyecolor`を通じて

package lets_start; 

public class Fist extends Person { 
    public static void main(String[] args) { 
     Fist f = new Fist(); 
     f.eyecolor = "Brown"; 
     System.out.println(f.eyecolor); 
    } 
} 
+0

私が行ったときに値が格納される場所: f.setEyecolor( "Brown"); –

関連する問題