mizzsugar’s blog

Pythonで学んだことや読書録を書きます。

【Java入門】インスタンスとクラスとは

車の設計図となるクラスを作成し、メインクラスで車を生成し、その車を走らせる

目標:インスタンスとクラスの違いを理解する

クラスとは、製品の設計図のようなもの

例えば、現実世界で車の設計図を作るとすると、以下のようになると思います。

特徴、部品 動き、仕様(メソッド)
名前 名前がある
色がある
燃料 燃料を追加することができる
走行距離 走るにつれて移動距離が増える
走るにつれて燃料が減る

クラスとは、設計図のことを指します。 または、ある実体を実体を生成するために定義された概念のようなもの。 フィールドは、実体が持つ部品や特徴のことを指します。 メソッドは、実体ができる動きや仕様のことを指します。

車の設計図を、クラスに落とし込むと、以下のようになります。

Carクラス

public class Car {
    private String name;
    private String color;

   //燃料と走行距離の初期値は0とする
    private int fuel = 0;
    private int distance = 0;

   //車の名前を設定する
    public void setName(String name) {
        this.name = name;
    }

   //車の色を指定する
    public void setColor(String color) {
        this.color = color;
    }


   //車の燃料を給油する(ここでは、単位はリットルとする)
    public void setFuel(int fuel) {
        this.fuel += fuel;
    }

        //車を走らせる。走行距離の分だけ燃料が減る(ここでは、1キロ走ると1リットル燃料が減るとする)
    public void run(int distance) {
        this.fuel -= distance;
        this.distance += distance;
    }
}

インスタンスとは、設計図を元に作成された実体のこと

しかし、車の設計書だけでは車は動きません。 実際に動く車を生成する必要があります。

つまり、クラスだけある状態だと、設計書だけある状態なので、 何も起こらないため、実際に動く実体を作るというわけです。

その実体のことを、インスタンスと言います。

また、実際に車を動かすのにも、設計書だけでは足りません。 上記のCarクラス内のメソッドでは、指示出しは行なっていません。 どのように動くのか、指示を出すためのメソッドが必要です。

この記事では、メインクラスを作成し、 インスタンスの生成、インスタンスへの指示は、 public static void main (String args[]){ } というメソッド内で行わうよう設定します。

public = 外に公開している static = 静的な(インスタンスがなくても指示できる。逆に、上記Carクラスのメソッドはstaticがないので、指示する際にはインスタンス名.メソッド名()とする必要があります。) void = 戻り値のない (String args[]) = String配列を引数にもつ mainという名前のメソッド

車を生成し、 名前(車種)をフェラーリで赤色に指定して、 100リットル給油した後に40キロ走らせるよう指示を出すと、 以下のようになります。

public class Main {

    public static void main(String[] args) {
                 // ferrariというCarクラスのインスタンスを生成
        Car ferrari = new Car();

                 //インスタンスferrariの名前(車種)を「Ferrarri」と設定
        ferrari.setName("Ferrari");

                //インスタンスferrariの色を赤色に設定
        ferrari.setColor("red");

                //インスタンスferrariに100リットル給油
        ferrari.setFuel(100);

                //インスタンスferrariに40キロ走らせる
        ferrari.run(40);
    }

}