Javaクラスとオブジェクト

1. 概要

このクイックチュートリアルでは、Javaプログラミング言語のクラスとオブジェクトの2つの基本的な構成要素を見ていきます。 それらは、実際のエンティティをモデル化するために使用するオブジェクト指向プログラミング(OOP)の基本概念です。
OOPでは、* classesはオブジェクトの設計図またはテンプレートです。 それらを使用して、エンティティのタイプを記述します。*
一方、*オブジェクトは、クラスから作成された生きたエンティティです。 それらはフィールド内に特定の状態を含み、メソッドで特定の動作を示します。*

2. クラス

簡単に言えば、クラスはオブジェクトの定義またはタイプを表します。 Javaでは、クラスにフィールド、コンストラクター、およびメソッドを含めることができます。
_Car_を表す単純なJavaクラスを使用した例を見てみましょう。
class Car {

    // fields
    String type;
    String model;
    String color;
    int speed;

    // constructor
    Car(String type, String model, String color) {
        this.type = type;
        this.model = model;
        this.color = color;
    }

    // methods
    int increaseSpeed(int increment) {
        this.speed = this.speed + increment;
        return this.speed;
    }

    // ...
}
このJavaクラスは、一般的に自動車を表します。 このクラスからあらゆるタイプの車を作成できます。 フィールドを使用して状態を保持し、コンストラクターを使用してこのクラスからオブジェクトを作成します。
すべてのJavaクラスには、デフォルトで空のコンストラクタがあります。 上記のように特定の実装を提供しない場合に使用します。 デフォルトのコンストラクターが_Car_クラスを探す方法は次のとおりです。
Car(){}
*このコンストラクタは、単にオブジェクトのすべてのフィールドをデフォルト値で初期化します。 文字列は_null_に、整数はゼロに初期化されます。*
現在、クラスには特定のコンストラクターがあります。これは、オブジェクトを作成するときにオブジェクトのフィールドを定義するためです。
Car(String type, String model) {
    // ...
}
まとめると、車を定義するクラスを作成しました。 そのプロパティは、クラスのオブジェクトの状態を含むフィールドによって記述され、その動作はメソッドを使用して記述されます。

3. オブジェクト

クラスはコンパイル時に変換されますが、*オブジェクトは実行時にクラスから作成されます*。
クラスのオブジェクトはインスタンスと呼ばれ、コンストラクタを使用してそれらを作成および初期化します。
Car focus = new Car("Ford", "Focus", "red");
Car auris = new Car("Toyota", "Auris", "blue");
Car golf = new Car("Volkswagen", "Golf", "green");
これで、すべてが単一のクラスから異なる_Car_オブジェクトを作成しました。 *これがすべてのポイントであり、ブループリントを1か所で定義し、その後、多くの場所で何度も再利用します。*
これまでのところ、3つの_Car_オブジェクトがあり、速度がゼロであるため、すべて駐車されています。 これを変更するには、_increaseSpeed_メソッドを呼び出します。
focus.increaseSpeed(10);
auris.increaseSpeed(20);
golf.increaseSpeed(30);
今、私たちは車の状態を変更しました-それらはすべて異なる速度で動いています。
さらに、クラス、そのコンストラクタ、フィールド、およびメソッドへのアクセス制御を定義できますし、定義する必要があります。 次のセクションで説明するように、アクセス修飾子を使用してこれを行うことができます。

4. アクセス修飾子

前の例では、コードを簡素化するためにアクセス修飾子を省略しました。 そうすることで、実際にはデフォルトのpackage-private修飾子を使用しました。 この修飾子を使用すると、同じパッケージ内の他のクラスからクラスにアクセスできます。
通常、コンストラクタに_public_修飾子を使用して、他のすべてのオブジェクトからのアクセスを許可します。
public Car(String type, String model, String color) {
    // ...
}
クラスのすべてのフィールドとメソッドは、特定の修飾子によるアクセス制御も定義する必要があります。 *クラスには通常_public_修飾子がありますが、フィールドは_private_のままにしておく傾向があります。*
フィールドにはオブジェクトの状態が保持されるため、その状態へのアクセスを制御する必要があります。 それらのいくつかを_private_、その他を_public_保持できます。 ゲッターおよびセッターと呼ばれる特定のメソッドでこれを実現します。
完全に指定されたアクセス制御を持つクラスを見てみましょう。
public class Car {
    private String type;
    // ...

    public Car(String type, String model, String color) {
       // ...
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getSpeed() {
        return speed;
    }

    // ...
}
*私たちのクラスは_public_とマークされています。これは、どのパッケージでも使用できることを意味します。*また、コンストラクタは_public_です。これは、このクラスから他のオブジェクト内にオブジェクトを作成できることを意味します。
*私たちのフィールドは_private_とマークされています。つまり、オブジェクトから直接アクセスすることはできません*。ただし、ゲッターとセッターを介してアクセスできます。
_type_および_model_フィールドには、オブジェクトの内部データが保持されるため、ゲッターとセッターがありません。 これらは、初期化中にコンストラクターを介してのみ定義できます。
さらに、_color_はアクセスおよび変更できますが、_speed_はアクセスのみ可能で、変更はできません。 特別な_public_メソッド_increaseSpeed()_および_decreaseSpeed()_を介して速度調整を実施しました。
つまり、*アクセス制御を使用してオブジェクトの状態をカプセル化します。*

5. 結論

この記事では、Java言語の2つの基本要素であるクラスとオブジェクトを調べ、それらがどのように、なぜ使用されるかを示しました。 また、アクセス制御の基本を紹介し、その使用方法を示しました。
Java言語の他の概念を学ぶには、https://www.baeldung.com/java-inheritance [inheritance]、https://www.baeldung.com/java-super [the super keyword]、およびhttpsについて読むことをお勧めします。 ://www.baeldung.com/java-abstract-class [abstract classes]次のステップとして。
この例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-lang[GitHubで利用可能]です。