修飾子(Modifer)

修飾子は変数やメソッド、クラスの挙動を指定するものです。
主な修飾子には以下のものがあります。

アクセス修飾子(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 {
    //内部クラスの実装
  }
}

コメント

タイトルとURLをコピーしました