TECH I.S.

Java 修飾子


修飾子

ここまでで、ほぼすべての例に登場するpublicについてはよくご存じでしょう。

public class Main

publicはアクセス修飾子であり、クラス、属性、メソッド、コンストラクターのアクセスレベルを設定するために使用されることを意味します。

修飾子を 2 つのグループに分けます。

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

アクセス修飾子

クラスの場合は、publicまたはデフォルトのいずれかを使用できます。


修飾子 説明 それを試す
public このクラスには他のクラスからアクセスできます 試してみる "
default クラスにアクセスできるのは、 このクラスには、同じパッケージ内のクラスからのみアクセスできます。修飾子を指定しない場合に使用します。 パッケージについて詳しくは、パッケージの章を参照してください。 試してみる "

属性、メソッド、コンストラクターには、次のいずれかを使用できます。


修飾子 説明 それを試す
public コードはすべてのクラスでアクセス可能です 試してみる "
private コードは宣言されたクラス内でのみアクセス可能です 試してみる "
default コードは同じパッケージ内でのみアクセスできます。修飾子を指定しない場合に使用します。 パッケージについては、パッケージの章で詳しく説明します。 試してみる "
protected コードは同じパッケージやサブクラスでアクセスできます、サブクラスとスーパークラスついては継承の章で詳しく説明します。 試してみる "


非アクセス修飾子

クラスの場合は、finalまたはabstractを使用できます。


修飾子 説明 それを試す
final クラスを他のクラスに継承することはできません (継承の詳細については、継承の章で詳しく説明します。) 試してみる "
abstract このクラスを使用してオブジェクトを作成することはできません (抽象クラスにアクセスするには、 別のクラスから継承する必要があります。継承と抽象化については、継承の章抽象化の章で詳しく説明します。) 試してみる "

属性メソッドには、次のいずれかを使用できます。


修飾子 説明
final 属性とメソッドはオーバーライド/変更できません
static 属性とメソッドは、オブジェクトではなくクラスに属します
abstract 抽象クラスでのみ使用でき、メソッドでのみ使用できる。例えば abstract void run(); のように、 メソッドはボディを持たない。ボディはサブクラスが提供します(継承元)。 継承と抽象化については、継承の章抽象化の章で詳しく学習します。
transient 属性とメソッドは、それらを含むオブジェクトをシリアル化するときにスキップされます
synchronized 一度に 1 つのスレッドのみがメソッドにアクセスできます
volatile 属性の値はスレッド ローカルにキャッシュされず、常に「メイン メモリ」から読み取られます。



Final

既存の属性値をオーバーライドできないようにするには、属性をfinalとして宣言します。

public class Main { final int x = 10; final double PI = 3.14; public static void main(String[] args) { Main myObj = new Main(); myObj.x = 50; // will generate an error: cannot assign a value to a final variable myObj.PI = 25; // will generate an error: cannot assign a value to a final variable System.out.println(myObj.x); } }

自分で試してみる»


静的

staticメソッドは、publicとは異なり、クラスのオブジェクトを作成せずにアクセスできることを意味します。

staticメソッドとpublicメソッドの違いを示す例は次のとおりです。
public class Main { // Static method static void myStaticMethod() { System.out.println("Static methods can be called without creating objects"); } // Public method public void myPublicMethod() { System.out.println("Public methods must be called by creating objects"); } // Main method public static void main(String[ ] args) { myStaticMethod(); // Call the static method // myPublicMethod(); This would output an error Main myObj = new Main(); // Create an object of Main myObj.myPublicMethod(); // Call the public method } }

自分で試してみる»


概要

abstractメソッドはabstractクラスに属しており、本体はありません。本体はサブクラスによって提供されます。

// Code from filename: Main.java // abstract class abstract class Main { public String fname = "John"; public int age = 24; public abstract void study(); // abstract method } // Subclass (inherit from Main) class Student extends Main { public int graduationYear = 2018; public void study() { // the body of the abstract method is provided here System.out.println("Studying all day long"); } } // End code from filename: Main.java // Code from filename: Second.java class Second { public static void main(String[] args) { // create an object of the Student class (which inherits attributes and methods from Main) Student myObj = new Student(); System.out.println("Name: " + myObj.fname); System.out.println("Age: " + myObj.age); System.out.println("Graduation Year: " + myObj.graduationYear); myObj.study(); // call abstract method } }

自分で試してみる»



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細