📝

【Java】アクセス修飾子についてまとめた

2021/10/09に公開

はじめに

Javaのアクセス修飾子について、会社のテストや面談で聞かれるのですが、うまく答えられなかったので調べてまとめました。

参考にした記事

https://qiita.com/fkana/items/bedd07e07cb7ab78a596
https://www.sejuku.net/blog/22679
https://techacademy.jp/magazine/27346

アクセス修飾子とは

  • 変数やメソッドやクラスが、どこからアクセスできるかを表す
  • アクセス修飾子は、public, protected, デフォルト(指定なし), privateの4種類
  • 変数やメソッドには4種類のうちどれでも1つ付けることができるが、クラスにはprotectedやprivateは付けられない(publicかデフォルトのみ)
  • アクセス修飾子をつけてアクセスできる範囲を、スコープという

パッケージとクラスについて

  • パッケージ…クラスをグループ化して分ける仕組み。
  • クラス…プログラムを実行するための処理(メソッド)をまとめたもの。

↓こちらの記事が分かりやすかったです。
http://www.itsenka.com/contents/development/java/package.html

アクセス修飾子の種類

スコープが広い順に、それぞれのアクセス修飾子についてまとめました。

1. public

  • どこからでもアクセス可能(制限が掛かっていないのと同じ)

2. protected

  • 同一パッケージとサブクラスからアクセス可能

※サブクラス(子クラス)とは
クラスの内容を継承して作られた新しいクラスのこと。
サブクラスの元になるクラスは、スーパークラス(親クラス)という。

3. デフォルト(指定なし)

  • 同一パッケージ内のすべてのクラスからアクセス可能
  • protectedと違って、サブクラスからアクセスできない

4. private

  • 同一クラスからのみアクセス可能

アクセスできる範囲を表にすると

アクセス修飾子 同一クラス 同一パッケージ サブクラス すべて※
public
protected ×
デフォルト × ×
private × × ×
※すべて=他のパッケージを含む

つまりこういうこと!

アクセスできる範囲の画像

おわりに

今まで曖昧だったアクセス修飾子ですが、記事や図を書いたことで自信を持って説明できるようになりました!
冒頭で紹介した素晴らしい記事を書いてくださった方々、ありがとうございました!

Discussion