Javaのアクセス修飾子とfinal修飾子をやさしく解説!新人エンジニア必見

こんにちは。ゆうせいです。

今回はJavaの「アクセス修飾子」と「final修飾子」について、新人エンジニア向けにわかりやすく解説します。文法の話ではありますが、クラス設計の基本中の基本なので、しっかり押さえておきましょう!


アクセス修飾子とは?

アクセス修飾子の役割

アクセス修飾子とは、どこからそのクラスやメンバ(フィールド、メソッド)にアクセスできるのかを指定するキーワードです。

例えるなら、クラスやメソッドの「鍵」みたいなものですね。「誰が入れるか」を決める玄関の鍵のようなイメージです。

クラスのアクセス修飾子は2種類だけ!

Javaではクラスに使えるアクセス修飾子は2種類しかありません。とてもシンプルです。

アクセス修飾子意味
publicすべてのパッケージからアクセス可能
なし(デフォルト)同じパッケージ内からのみアクセス可能

例:

// publicクラス
public class Animal {
    ...
}

// デフォルトアクセス(アクセス修飾子なし)
class Dog {
    ...
}

ポイント!

  • publicにしないと、別のパッケージからそのクラスにアクセスできません。
  • つまり、たとえ中にあるメソッドがpublicでも、クラス自体がpublicでなければ意味がないんです。

玄関が閉まってたら、部屋のドアが開いてても意味ないですよね?そんなイメージです。


Javaファイル内でpublicなクラスは1つだけ

Javaにはルールがあります。

  • publicをつけられるクラスは、1つのJavaファイルにつき1つだけ
  • そのクラス名とファイル名は一致していなければなりません!

例:

// ファイル名: MyApp.java
public class MyApp {
    ...
}

このルールを守らないと、コンパイルエラーになります。


final修飾子とは?

finalの基本的な意味

finalは英語で「最後の、これ以上変更しない」という意味です。Javaでも変更を禁止する用途で使われます。

使いどころは3つ!

修飾対象意味
クラス継承できない(=サブクラスを作れない)
メソッドオーバーライドできない(=サブクラスで上書き不可)
変数再代入できない(=定数になる)

具体例で理解しよう!

① finalな変数:再代入禁止!

final int MAX = 100;
MAX = 200; // エラー!

  • finalな変数は、一度値を入れたら二度と変更できません。
  • これは定数として使いたいときに便利です。

② finalなクラス:継承禁止!

public final class String {
    ...
}

JavaのStringクラスはfinalです。つまり、自分でこのクラスを拡張して新しい文字列クラスを作ることはできません。

誰もが勝手にStringを拡張していたら、混乱しますよね?

③ finalなメソッド:オーバーライド禁止!

class Parent {
    public final void show() {
        System.out.println("Hello");
    }
}

class Child extends Parent {
    public void show() { // エラー!
        System.out.println("Hi");
    }
}

  • 親クラスのshow()finalがついていると、子クラスで同名メソッドを上書き(オーバーライド)できません。

まとめ:表でおさらい

finalの使い方効果
finalクラス継承できない(サブクラス不可)
finalメソッドオーバーライドできない
final変数定数(再代入不可)

「できない」「できない」「できない」、まさにfinal(最後)という名前がぴったりですね!


よくある質問と補足

Q. アクセス修飾子とfinal修飾子、同時に使えるの?

はい、使えます!

public final class Utility {
    public static final double PI = 3.14;
}

  • Utilityクラスは継承できません。
  • PIは変更できません。

Q. どれを使えばいいの?

場面によって使い分けましょう。

  • クラスを外部に公開したい → public
  • 他から変更されたくない → final
  • オーバーライドされたら困るメソッド → finalをつける

今後の学習の指針

次は「カプセル化(Encapsulation)」の話に進みましょう。アクセス修飾子はカプセル化を支える柱の1つです。

以下を意識して復習すると理解が深まります。

  • クラスとパッケージの関係
  • アクセス範囲を意識した設計
  • finalをどこで使えば安全になるのか?

次回は、カプセル化による情報の隠蔽と安全な設計の考え方に触れていきます!お楽しみに。

知識を積み重ねて、「読める」から「書ける」へステップアップしていきましょう!


セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。