第8回 アクセス修飾子
public class Main { public static void main(String args[]) { //--------------------------------------------------// // 他のクラスからの呼び出し例 //--------------------------------------------------// System.out.println("他のクラスからの呼び出し例"); //**************************************************// // インスタンス変数の例 //**************************************************// // publicなインスタンス変数にアクセス OK System.out.println( new Hoge().a ); // privateなインスタンス変数にアクセスNG // System.out.println( new Hoge().b ); エラー // protectedなインスタンス変数にアクセス // 同じパッケージの場合OK // 別パッケージの場合NG System.out.println( new Hoge().c ); //**************************************************// // メソッド呼び出しの例 //**************************************************// // publicなメソッド呼び出し OK System.out.println( new Hoge().m() ); // privateなメソッド呼び出しNG // System.out.println( new Hoge().f() ); エラー // privateなインスタンス変数を内部で使っているpublicなメソッド呼び出し OK System.out.println( new Hoge().get_b() ); // privateなメソッドを呼び出しているpublicなメソッド呼び出し OK System.out.println( new Hoge().get_f() ); // protectedなメソッド呼び出し // 同じパッケージの場合OK // 別パッケージの場合NG System.out.println( new Hoge().h() ); //--------------------------------------------------// // 継承したクラスからの呼び出し例 //--------------------------------------------------// System.out.println("継承したクラスの呼び出し例"); //**************************************************// // インスタンス変数の例 //**************************************************// // publicなインスタンス変数にアクセス OK System.out.println( new Hoge(){ public String get_a(){ return a; } }.get_a() ); // privateなインスタンス変数にアクセスNG // System.out.println( // new Hoge(){ public String get_b(){ return b; } }.get_b() // ); エラー // protectedなインスタンス変数にアクセス // 同じパッケージの場合OK // 別パッケージの場合もOK!! // そもそもprotectedは子クラスからは触れても、 // 他のクラスからは触らせたくない仕組み System.out.println( new Hoge(){ public String get_c(){ return c; } }.get_c() ); //**************************************************// // メソッド呼び出しの例 //**************************************************// // publicなメソッド呼び出し OK System.out.println( new Hoge(){ public String do_m(){ return m(); } }.do_m() ); // privateなメソッド呼び出しNG //System.out.println( // new Hoge(){ public String do_f(){ return f(); } }.do_f() //); エラー // protectedなメソッド呼び出し // 同じパッケージの場合OK // 別パッケージの場合もOK!! // そもそもprotectedは子クラスからは触れても、 // 他のクラスからは触らせたくない仕組み System.out.println( new Hoge(){ public String do_h(){ return h(); } }.do_h() ); } } class Hoge{ public String a = "a"; private String b = "b"; protected String c = "c"; public String m(){ return "m"; } private String f(){ return "f"; } protected String h(){ return "h"; } public String get_b(){ return b; } public String get_f(){ return f(); } }
結果:
他のクラスからの呼び出し例 a c m b f h 継承したクラスの呼び出し例 a c m h