Java のアクセス修飾子

Java のアクセス修飾子

Java では、アクセス修飾子は、変数メソッドなどのクラスのメンバー、さらにはプログラムの他の部分からクラス自体にアクセスする方法を定義する重要なツールです。

Java で使用できるアクセス修飾子は 4 種類あります。 

Java の Access-Modifiers-1Java のアクセス修飾子

プライベートアクセス修飾子

private アクセス修飾子は、キーワード private を使用して指定します。 private として宣言されたメソッドまたはデータ メンバーは、それらが宣言されているクラス内でのみアクセスできます。

Java
   class   Person     {      // private variable      private     String     name  ;      public     void     setName  (  String     name  )     {      this  .  name     =     name  ;     // accessible within class      }      public     String     getName  ()     {     return     name  ;     }   }   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      Person     p     =     new     Person  ();      p  .  setName  (  'Alice'  );      // System.out.println(p.name); // Error: 'name'      // has private access      System  .  out  .  println  (  p  .  getName  ());      }   }   

出力
Alice  

説明: カプセル化を強制するユーザー以外では、名前への直接アクセスは許可されません。

デフォルトのアクセス修飾子

クラスメソッドまたはデータメンバーにアクセス修飾子が指定されていない場合、デフォルトでデフォルトのアクセス修飾子があると言われます。これは、同じパッケージ内のクラスのみがそれにアクセスできることを意味します。

Java
   class   Car     {      String     model  ;     // default access   }   public     class   Main     {          public     static     void     main  (  String  []     args  ){          Car     c     =     new     Car  ();      c  .  model     =     'Tesla'  ;     // accessible within the same package      System  .  out  .  println  (  c  .  model  );      }   }   

出力
Tesla  

説明: デフォルトのアクセス権を持つメンバーには、別のパッケージ内のクラスからアクセスできません。

Geeks.java: 同じパッケージ内のデフォルトのクラス

Java
   // default access modifier    package     p1  ;      // Class Geek is having    // Default access modifier    class   Geek      {         void     display  ()         {         System  .  out  .  println  (  'Hello World!'  );         }      }   

GeeksNew.java: 別のパッケージのデフォルト クラス (コントラスト用)

C++
   // package with default modifier    package     p2  ;      import     p1  .  *  ;     // importing package p1   // This class is having    // default access modifier    class     GeekNew     {         public     static     void     main  (  String     args  [])     {             // Accessing class Geek from package p1       Geek     o     =     new     Geek  ();         o  .  display  ();         }      }   

説明:  この例では、別のパッケージからデフォルトの修飾子クラスにアクセスしようとすると、プログラムはコンパイル時エラーを表示します。

保護されたアクセス修飾子

protected アクセス修飾子は、キーワード protected を使用して指定します。 protected として宣言されたメソッドまたはデータ メンバーは、同じパッケージ内または異なるパッケージ内のサブクラス内でアクセスできます。

Java
   class   Vehicle     {      protected     int     speed  ;     // protected member   }   class   Bike     extends     Vehicle     {      void     setSpeed  (  int     s  )      {      speed     =     s  ;     // accessible in subclass      }      int     getSpeed  ()      {      return     speed  ;     // accessible in subclass      }   }   public     class   Main     {      public     static     void     main  (  String  []     args  ){          Bike     b     =     new     Bike  ();      b  .  setSpeed  (  100  );      System  .  out  .  println  (  'Access via subclass method: '      +     b  .  getSpeed  ());      Vehicle     v     =     new     Vehicle  ();      System  .  out  .  println  (  v  .  speed  );      }   }   

出力
Access via subclass method: 100 0  

説明: 速度には、サブクラス メソッドおよび同じパッケージ内の他のクラスを介してアクセスできますが、別のパッケージ (非サブクラス) からの直接アクセスは失敗します。

パブリックアクセス修飾子

public アクセス修飾子は、キーワード public を使用して指定します。 パブリック メンバーはプログラム内のどこからでもアクセスできます。パブリック データ メンバーの範囲に制限はありません。

Java
   class   MathUtils     {             public     static     int     add  (  int     a       int     b  )     {      return     a     +     b  ;      }   }   public     class   Main     {          public     static     void     main  (  String  []     args  )     {          System  .  out  .  println  (  MathUtils  .  add  (  5       10  ));     // accessible anywhere      }   }   

出力
15  

説明: add() は public 修飾子によりグローバルにアクセスできます。

プライベートとは「囲んでいるクラス内でのみ表示される」ことを意味するため、トップレベルのクラスまたはインターフェイスをプライベートとして宣言することはできません。

Java のアクセス修飾子の比較表

同じクラスアクセス修飾子

実際のプロジェクトで各アクセス修飾子を使用する場合

  • プライベート: 考え方としては、可能な限り限定的なアクセスを使用する必要があるため、可能な限りプライベートを使用する必要があります。
  • デフォルト (Package-Private): パッケージをスコープとするユーティリティまたはヘルパー クラスでよく使用されます。
  • 保護中: フレームワーク拡張機能などの継承ベースの設計でよく使用されます。
  • 公共 : これは、アプリケーションのさまざまな部分で共有される API エンドポイント サービス クラスまたはユーティリティ メソッドに使用されます。


クイズの作成