修飾子は変数やメソッド、クラスの挙動を指定するものです。
主な修飾子には以下のものがあります。
アクセス修飾子(Access Modifiers)
アクセス修飾子は、指定した対象にアクセスできる範囲を指定する修飾子です。
アクセスできる範囲は以下の表の通りです。例えばメソッドにprivateを指定すると、そのメソッドは同一クラス内からしか呼び出すことができなくなります。
修飾子 | UML表記 | 参照範囲 |
---|---|---|
public | + | どこからでもアクセス可能 |
protected | # | 同一クラス、同一パッケージのクラス、サブクラスからのみアクセス可能 |
(指定なし) | ~ | 同一クラス、同一パッケージのクラスからのみアクセス可能 |
private | – | 同一クラスからのみアクセス可能 |
アクセス修飾子はクラス、コンストラクタ、メンバー変数、メソッド、内部クラスに指定できますが、クラスに対しては一部のアクセス修飾子は指定できません。
修飾子 | クラス | コンストラクタ | メンバ変数 | メソッド | 内部クラス |
---|---|---|---|---|---|
public | ◯ | ◯ | ◯ | ◯ | ◯ |
protected | ✕ | ◯ | ◯ | ◯ | ◯ |
指定なし | ◯ | ◯ | ◯ | ◯ | ◯ |
private | ✕ | ◯ | ◯ | ◯ | ◯ |
- (クラスに指定した例)
-
public class SampleClass { //クラス定義 }
- (コンストラクタに指定した例)
-
public class SampleClass { public SampleClass(int a) { //コンストラクタ定義 } }
- (メンバ変数に指定した例)
-
private String str = "ABC";
- (メソッドに指定した例)
-
private void method() { //メソッド定義 }
- (内部クラス指定した例)
-
public class OuterClass { public class InnerClass { //内部クラス定義 } }
abstract修飾子(Abstract Modifiers)
abstract修飾子はクラス、メソッド、内部クラスに指定することができる修飾子で、付加するとそれぞれ抽象クラス、抽象メソッドとなります。
対象 | 解説 |
---|---|
クラス | クラスに付けると抽象クラスになります。抽象クラスとしたクラスはインスタンス化(new)することができなくなり、継承したサブクラスを作ることが必須となります。 抽象クラス内には抽象メソッドを作成しても作成しなくてもどちらでもOKです。 |
メソッド | メソッドに付けると抽象メソッドになります。抽象メソッドは以下の例のように処理の内容を記述することができなくなり、サブクラスでの実装が必須となります。 また、抽象メソッドを作成したらクラスにもabstract指定して抽象クラスとする必要があります。 |
内部クラス | 抽象クラスとなる |
- (クラスに対するabstract修飾子サンプル)
-
abstract class SampleClass;
- (メソッドに対するabstract修飾子サンプル)
-
abstract void method();
- (内部クラスに対するabstract修飾子サンプル)
-
public class OuterClass { //抽象内部クラス abstract class InnerClass { //抽象メソッド abstract void method(); } }
final修飾子(Final Modifiers)
final修飾子は クラス、メンバ変数、メソッド、内部クラスに指定することができる修飾子で、それぞれ意味合いが異なります。
対象 | 説明 |
---|---|
クラス | クラスに付けた場合は、そのクラスは継承不可となります。 |
メンバ変数 | 変数に付けた場合、その変数は定数となります。定数は変数宣言時に初期値の代入が必須となり、以後その値を変更することはできません。 メンバー変数、ローカル変数どちらにも指定可能です。 |
メソッド | メソッドに付けた場合、そのメソッドはオーバーライド不可となります。 |
内部クラス | 内部クラスの継承が不可となる |
- (クラスに対するfinal修飾子サンプル)
-
final class SampleClass{ }
- (メンバ変数に対するfinal修飾子サンプル)
-
public final String VALUE = "ABC";
- (メソッドに対するfinal修飾子サンプル)
-
public final void method(){ }
- (内部クラスに対するfinal修飾子サンプル)
-
public class OuterClass { final class InnerClass { // クラスの定義 } }
static修飾子(Static Modifiers)
static修飾子は メンバ変数、メソッド、内部クラスに指定することができる修飾子で、staticを指定するとインスタンスを生成しなくても(newしなくても)使用できるようになります。
使用される状況としては、全てのクラス共通で使われる変数や共通メソッドに使用したりします。
対象 | 説明 |
---|---|
メンバ変数 | インスタンス化せずともアクセスできる 値はクラスレベルで共有されるため、クラス全体で共有されるデータに向いている。 |
メソッド | インスタンス化せずともアクセスできる クラス全体で共有して使用されるメソッドに向いている。 |
内部クラス | 静的クラスとなる。外部クラスのインスタンスに依存せず、独立して存在するクラスになる。 |
- (メンバ変数に対するstatic修飾子サンプル)
-
public static String aa = "ABC";
- (メソッドに対するstatic修飾子サンプル)
-
public static void method() { }
- (内部クラスに対するstatic修飾子サンプル)
-
public class OuterClass { public static class InnerClass { //内部クラスの実装 } }
コメント