Java基礎 第8回の6章は、初学者の方からjavaを触れた時からの疑問だったであろう「アクセス修飾子」についてそれぞれの特性と具体的なコード例を交えて詳細に解説しています。
アクセス修飾子は、コードの保守性と拡張性に大きな影響を与えます。
この先のオブジェクト指向の「カプセル化」にも関わってきますので、しっかり学習していきましょう。
また、Java Silverの資格試験でもアクセス修飾子の問題は取り上げられているので、資格試験の勉強をしている方にも
役立る内容となっています。
メソッドのアクセス修飾子
Javaのメソッドには4つのアクセス修飾子があります。それぞれがメソッドに対する異なるアクセスレベルを提供します。以下の表は、それぞれのアクセス修飾子がどのようなアクセスレベルを許可するかをわかりやすく表したものです
パッケージ、サブクラス、任意のクラスについて簡単に下記に紹介します。
パッケージについては次回以降の記事で詳しく解説していきますので、なんとなくのイメージだけ掴んでみてください
- パッケージ:パッケージとはJavaの名前空間管理のための単位です。関連するクラスやインターフェースをまとめるために使用されます。たとえば、あるパッケージ内にDogクラスとCatクラスが存在するとします。パッケージはフォルダのようなもので、関連するクラスを一緒に保管する役割を果たします。
- サブクラス:サブクラス(または子クラス)とは、あるクラス(親クラス)から継承されるクラスのことを指します。例えば、Animalクラスから継承したDogクラスやCatクラスはAnimalクラスのサブクラスです。サブクラスは親クラスの特性を受け継ぎ、新たな特性を追加することができます。
- 任意のクラス:「任意のクラス」とは、Javaプログラム内で定義されたどんなクラスでも良い、ということを指します。これにはパッケージ、サブクラスの関係性に関わらず、全てのクラスが含まれます。
public
public`と指定されたメソッドは、どこからでもアクセス可能です。つまり、同じパッケージ内の他のクラスや異なるパッケージのクラスからも参照・呼び出しが可能です。この修飾子は一般的に、クラスの外部から使用するためのメソッドに対して使用されます。
public class MyClass {
public void myPublicMethod() {
// publicメソッドの中身
}
}
private
`private`と指定されたメソッドは、そのメソッドを含むクラスからのみアクセス可能です。このメソッドは、同じパッケージ内の他のクラスや異なるパッケージのクラスからはアクセスすることができません。この修飾子は一般的に、クラス内部の詳細な実装に関連するメソッドに対して使用されます。
public class MyClass {
private void myPrivateMethod() {
// privateメソッドの中身
}
}
protected
`protected`と指定されたメソッドは、同じパッケージ内の任意のクラスおよびサブクラスからアクセス可能です。ただし、異なるパッケージの非サブクラスからはアクセスすることができません。この修飾子は一般的に、サブクラスで再利用されることを意図したメソッドに対して使用されます。
public class MyClass {
protected void myProtectedMethod() {
// protectedメソッドの中身
}
}
デフォルト(なし)
アクセス修飾子が指定されていないメソッドはデフォルト(なし)となり、そのメソッドは同じパッケージ内の任意のクラスからアクセス可能です。しかし、異なるパッケージのクラス(サブクラスを含む)からはアクセスすることができません。
public class MyClass {
void myDefaultMethod() {
// デフォルトメソッドの中身
}
}
これらの修飾子をどのように使用するかは、プログラムの設計と具体的な要件によります。しかし、一般的には、クラスの内部実装を外部から隠蔽する(情報隠蔽)ために、`private`を用いて可能な限りメソッドのアクセスを制限することが推奨されます。これにより、クラスの使用方法を制御し、予期しない使用を防ぐことができます。
アクセス修飾子の選択は、コードの保守性と拡張性に大きな影響を与えます。
適切なアクセス修飾子を選択することで、クラスの再利用性と互換性を向上させ、不要なバグを防止することができます。
まとめ
今回はメソッドのアクセス修飾子について紹介していきました。
アクセス修飾子を適切に自分で判断することは最初は難しいかもしれませんが、アプリケーションなどの設計時に決めるものですので最初は気にしすぎずそれぞれの修飾子のルールだけ覚えておく程度でいいでしょう。
堅苦しく考えずに、どんどんコードを書いていくのが上達の秘訣です!
Java基礎 第8回 7章はメソッドのベストプラクティスについて紹介していきます。
コメント