目次
概要
クラスとインスタンスの違いについて、できるだけ分かり易い言葉や表現で説明します。
クラス
設計書だよ。
以上です。
ほんとマジで。
どんなデータと操作が可能かを決めているだけなので設計書と表現しています。
インスタンス
設計書から作られた実際に中身があるものだよ。
インスタンスが生成されたら、メモリのどこかに作られて操作可能になります。
例
ここからはちょっと小難しい話になりますが、図でできるだけわかり易く説明するようにしてみます。
扇風機クラス
扇風機は商品名、商品番号が情報として持っているよ。
また、タイマーと強弱の設定を機能として持っているよ。
クラスではそれらを決めているよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public class Fan { // 各フィールド private String name; private String itemNumber; private Timer timer; private Strength strength; // 扇風機を生成する public Fan(String name, String itemNumber, Timer timer, Strength strength) { this.name = name; this.itemNumber = itemNumber; this.timer = timer; this.strength = strength; } public void on() { System.out.println("電源ON"); } public void off() { System.out.println("電源off"); } // 風を強くする public void upStrength() { this.strength.up(); } // 風を弱くする public void downStrength() { this.strength.down(); } // タイマーをセットする public void setTimer(int time) { this.timer.set(time); } } |
インスタンスを作る
2個の扇風機を作るよ。
商品名 :小型扇風機
商品番号:1234567890、1234567891
タイマー、強弱機能を取り付け
1 2 3 4 |
public static void main(String[] args) { Fan miniFan1 = Fan("小型扇風機", "1234567890", new Timer(), new Strength()); Fan miniFan2 = Fan("小型扇風機", "1234567891", new Timer(), new Strength()); } |
newした後は、以下の図のように変数がアドレスでインスタンスを参照するようになります。
nullを代入する
1 2 3 4 5 6 |
public static void main(String[] args) { Fan miniFan1 = Fan("小型扇風機", "1234567890", new Timer(), new Strength()); Fan miniFan2 = Fan("小型扇風機", "1234567891", new Timer(), new Strength()); miniFan1 = null; // アドレス参照を削除 } |
インスタンスにnullを代入すると、インスタンスが無くなるのではなく、インスタンスを参照するアドレスが消えるので、インスタンスが無くなったように見えます。
まとめ
- クラスは設計図だよ。
- インスタンスは実際に作られたものだよ。
- インスタンスはアドレスで参照しているよ。
- null代入したらアドレスが消えるだけでインスタンスは残るよ。
コメント