【Java】アクセス修飾子「private」や「public」の使い方
- 作成日:2021/11/30
Javaのアクセス修飾子について解説します。 よく見る「private」や「public」に加えて、ついでに「protected」も説明します。
アクセス修飾子とは
変数やクラス名の前につけるアクセスできる範囲を指定するもので、Javaで定義された予約語です。 「private・public・protected」などがあります。 例えば、以下のように使います。
class TestClass{
String name;
public String gender;
private int age;
protected void eat(){
System.out.println("食事しました");
};
}
このように、アクセス修飾子はクラス名・変数名・関数名の前につけます。 もちろんつけなくても良いです。
ではそれぞれの意味と違いを見ていきましょう。
アクセス修飾子の意味
アクセス修飾子はアクセスできる範囲を指定したものです。 例えば、変数に指定すれば変数にアクセスできる範囲を決めることができます。
詳しい解説は後述するとして、まずは一覧表を載せておきます。
アクセス修飾子 | アクセス範囲 |
---|---|
public | どこからでもアクセス可能。 |
protected | 同じパッケージ内か、クラス継承でアクセス可能。 |
なし | 同じパッケージ内でしかアクセスできない。 |
private | 同じクラス内でしかアクセスできない。 |
では1つずつ解説していきます。
public
publicのアクセス修飾子がついた変数やメソッド、クラスはどこからでもアクセスできます。 あまり触ってほしくない変数とかにpublicをつけてしまうとバグの原因になるので、 なんでもかんでもpublicというのはお勧めしません。
protected
protectedのアクセス修飾子がついた変数やメソッドは同じパッケージ内であればアクセスできます。 なお、クラス名に対してprotectedは使えません。
また、クラス継承をすれば protectedがついた変数やメソッドにアクセスできます。
デフォルト(アクセス修飾子なし)
アクセス修飾子はなくても大丈夫です。 アクセス修飾子がない変数やメソッド、クラスは同一パッケージ内からアクセスできます。
private
privateのアクセス修飾子がついた変数やメソッドは同じクラス内でしか使えません。 なお、クラス名に対してprivateは使えません。
privateはアクセス修飾子の中で最もアクセスが制限されたものです。 あまり触ってほしくない変数やメソッドに対して付与したりします。
使いわけ
アクセス修飾子のつけ方ですが、必要最低限の権限を付与するのが望ましいです。
例えば、外部のクラスから触ってほしくない変数にはprivateをつけたり、 外部パッケージから触ってほしくないときはデフォルトやprotectedにしておくなどです。
全てpublicだとアクセス権を考える手間がなくて楽で良いのですが、 その分どこからでもアクセスできてしまうので、予期せぬエラーやバグがでる可能性があるのです。
一人でちょっとした開発をするくらいならアクセス修飾子は気にしなくても大して問題になりませんが、 複数人で大きな開発する場合は意識しておくと良いでしょう。