修飾子の詳細

修飾子の種類やその挙動についてまとめます。


修飾子の種類

修飾子は大きく分けて「アクセス修飾子」とそれ以外とに分類されます。次のような種類があります。


・修飾子の種類
説明
アクセス修飾子 public 制限はありません。どこからでもアクセス可能です。
protected 同一パッケージ内、またはそのサブクラスからのみアクセス可能です。
private 同一クラス内でのみアクセス可能です。
修飾子 abstract 抽象メソッドや抽象メソッドをもつクラスに指定します。 インターフェースは元々抽象メソッドしか定義できない為、省略されることが多いです。
final このクラスを継承することを禁止する(サブクラスを作成させたくない)場合に指定します。
strictfp 「float」や「double」の浮動小数点を用いた演算を厳密 (プラットフォームに依存しない(IEEE754に従う))に行いたいクラスに指定します。
static クラス固有のものとして、同一クラスからなる全インスタンスに共有させる場合に指定します。
transient シリアライズ(バイトストリーム変換)の時に値を保存したくない(一時的に使用する値・初期化したい値)フィールドに指定します。
volatile コンパイラによる最適化をさせたくないフィールドに指定します。(マルチスレッド等による参照値の相違をなくします。)
native プラットフォーム依存のコードで定義します。 (型、メソッド名、引数の型といったインターフェースにみを定義し、中身はC言語などの他の言語を用いて実装します。)
synchronized マルチスレッド環境において、同期処理(インスタンス単位で排他制御)させる場合に指定します。

付加対象マトリックス

各修飾子に対して付加することができる対象は次のようになります。


・修飾子の付加対象マトリックス
クラス インタフェース フィールド メソッド コンストラクタ ブロック
アクセス修飾子 public ×
protected × × ×
private × × ×
修飾子 abstract × × ×
final × × ×
strictfp × × × × ×
static × × ×
transient × × × × ×
volatile × × × × ×
native × × × × ×
synchronized × × × ×

▲PageTop

アクセス修飾子

アクセス修飾子について具体的なアクセス範囲や制限の強弱を整理すると次のようになります。


・各アクセス修飾子に対するアクセスイメージ

各アクセス修飾子のアクセスイメージ

※「class X」が「public」ではない場合は、「package X」外からのアクセスはできません。


上図から各アクセス修飾子に対して、制限の強度を比較すると次のようになります。
制限が弱い←  public < protected < デフォルト(省略時) < private  →制限が強い

▲PageTop