【Java】アクセス修飾子と非アクセス修飾子を解説します!

Javaには、アクセス修飾子と非アクセス修飾子の2種類の修飾子があります。
Javaのアクセス修飾子は、フィールド、メソッド、コンストラクタ、クラスのアクセシビリティ、スコープを指定します。アクセス修飾子を適用することで、フィールド、コンストラクタ、メソッド、クラスのアクセスレベルを変更できます。

アクセス修飾子 -アクセスレベルを制御します
非アクセス修飾子 -アクセスレベルを制御しませんが、他の機能を提供します

Javaの非アクセス修飾子

クラスの場合は、finalabstractを使用できます

装飾子 説明
final finalクラスは他のクラスから継承できません。クラスにfinal修飾子を付けた場合は、そのクラスは継承することが出来なくなります。
abstract クラスを使用してオブジェクトを作成することはできません。抽象クラスにアクセスするには、別のクラスから継承する必要があります。

attributes とメソッドは、下記のいずれかを使うことができます。

装飾子 説明
final 属性とメソッドはオーバーライド/変更できません
static 属性とメソッドはオブジェクトではなくクラスに属します。staticは、主にメモリ管理に使用されます。変数やメソッド、ブロック等、静的キーワードを適用できます。
abstract 抽象クラスでのみ使用でき、メソッドでのみ使用できます。 メソッドには実態がありませんのでそれ自体では使用できません。抽象クラスにアクセスするには、別のクラスから継承する必要があります。継承して初めて継承元で使うことができます。
transient トランジェントは、シリアライゼーションで使用される変数修飾子です。初期化時に、特定の変数の値をファイルに保存したくない場合は、transientを使用します。
synchronized メソッドは一度に1つのスレッドのみがアクセスできます
volatile 属性の値はスレッドローカルにキャッシュされず、常に「メインメモリ」から読み取られます。

Javaのアクセス修飾子

以下のためのクラスは、次のいずれかを使用することができますpublicまたはデフォルト:

Javaのアクセス修飾子には4つのタイプがあります。

装飾子 説明
public public修飾子のアクセスレベルはどこにでもあります。クラス内、クラス外、パッケージ内、パッケージ外からアクセスできます。
private プライベート修飾子のアクセスレベルは、クラス内のみです。クラス外からはアクセスできません。
default デフォルト修飾子のアクセスレベルは、パッケージ内のみです。パッケージの外部からはアクセスできません。アクセスレベルを指定しない場合は、それがデフォルトになります。
protected 保護された修飾子のアクセスレベルは、子クラスを通じてパッケージ内およびパッケージ外にあります。子クラスを作成しないと、パッケージの外部からアクセスできません。

final

javaのfinal修飾子はクラス、メソッド、変数全てにつけることができます。しかし、それぞれ意味が異なります。
クラスにつける場合は、そのクラスは継承することが出来なくなります。
クラスのメソッドにfinalを付けた場合、子クラスでのオーバーライドが不可になります。
変数にfinalを付けると値の変更ができなくなります。
変数にfinalを付ける場合、下記のように宣言します。

FlyTech.java:7: error: cannot assign a value to final variable x
myObj.x = 50;
FlyTech.java:8: error: cannot assign a value to final variable PI
myObj.PI = 25;
^ 2 errors

static

staticは、クラスとは異なり、オブジェクトを作成することなくアクセスすることができます。Javaのstaticキーワードは、主にメモリ管理に使用されます。変数、メソッド、ブロック、ネストされたクラスを含む静的キーワードを適用できます。staticキーワードは、クラスのインスタンスではなくクラスに属しています。。

staticpublicメソッドの違いを示す例

オブジェクトを作成せずに静的メソッドを呼び出す
オブジェクトを作成してパブリックメソッドを呼び出す必要あり

Abstract

abstractこの方法は、に属しabstract、それ自体は実行できません。継承されて初めて使うことができます。なぜ実行できないモノを作成するのかというと、管理しやすいからです。大きなプログラムになっていけばいくほど見にくく、管理しにくくなっていきます。その時に Abstractを使用していると、コーディングに制限をかけることができ、ある程度の品質は担保できるようになります。

名前: Flytech
年齢: 24
卒業年: 2018
一日中プログラミング

Writer

Ryotin

現役フリーランスエンジニアです。使ってるエージェントはフライテック!得意言語はJava。月収は75万円。SESのフリーランスではこれ以上稼ぐのは厳しそう...とはいってもサラリーマンの時より倍の収入だから家族も喜んでるけどね!

最新の案件情報