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年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年6月7日参照型の配列とNullPointerException
山崎講師2025年6月7日Javaでchar型は実は整数!?文字コードの正体に迫る!
山崎講師2025年6月7日Javaのエスケープシーケンスをマスターしよう!表示のズレに困ったらこれ!
山崎講師2025年6月7日Javaの「文字」と「文字列」の違いをやさしく解説!混同に注意!