Java では、アクセス修飾子は、変数メソッドなどのクラスのメンバー、さらにはプログラムの他の部分からクラス自体にアクセスする方法を定義する重要なツールです。
Java で使用できるアクセス修飾子は 4 種類あります。
Java のアクセス修飾子プライベートアクセス修飾子
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
説明: カプセル化を強制するユーザー以外では、名前への直接アクセスは許可されません。
デフォルトのアクセス修飾子
クラスメソッドまたはデータメンバーにアクセス修飾子が指定されていない場合、デフォルトでデフォルトのアクセス修飾子があると言われます。これは、同じパッケージ内のクラスのみがそれにアクセスできることを意味します。
Javaclass 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 として宣言されたメソッドまたはデータ メンバーは、同じパッケージ内または異なるパッケージ内のサブクラス内でアクセスできます。
Javaclass 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 を使用して指定します。 パブリック メンバーはプログラム内のどこからでもアクセスできます。パブリック データ メンバーの範囲に制限はありません。
Javaclass 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 エンドポイント サービス クラスまたはユーティリティ メソッドに使用されます。