インスタンスの基礎 new - 萌えJava超入門
第十六章 インスタンス

インスタンスの基礎

インスタンスの元になるクラスを作って、
インスタンスを生成しましょう。

Child_Ins child = new Child_Ins();

目次

1.インスタンスとは


インスタンスとは、クラスを元にクラスを実体化したオブジェクトのことです。
1つのクラスから、たくさんのインスタンスを作る事ができます。
インスタンスを生成することをインスタンス化、又はオブジェクト化といいます。

インスタンスは、元になったクラスのように振る舞います。
インスタンスは、元になったクラスや、他のインスタンスとは
独立したオブジェクトです。
それぞれのインスタンスは、別々の値を保持して互いに干渉しません。


このオブジェクトって
オブジェクト指向の?
そうなんだけど、落ち着いて。
オブジェクト指向が何なのか知るのは
インスタンスに慣れてからで十分だ。


2.オブジェクトとは


今は、オブジェクトという言葉が
クラスとインスタンスを指す言葉
ということだけ覚えておいてくれ。
オブジェクトとは
クラスインスタンスを指す言葉です。
結構あいまいな使われ方をする言葉ですね。

初心者向けに、「インスタンス = オブジェクト」と紹介される場合もありますが、
一般には、クラスや、インターフェース、抽象クラスなども
オブジェクトに含まれます。



3.インスタンスの元になるクラスの作り方


インスタンスの元になるクラス
インスタンスの元になるクラスを作るには、インスタンスで使いたいメンバを、
インスタンスメンバ(非staticメンバ)で記述します。
インスタンスメンバは、インスタンス化して初めて使用できるメンバです。

インスタンス化して
増やしたいメンバには
staticをつけないってことすか?
おお!
冴えてるね~。
インスタンスメンバ(非static)はインスタンスに所属しています。

classの構成要素メンバ詳細
class{
  • クラスメンバ(class member)
    static修飾子がありクラスに所属
    • クラス変数(class variable)
    • クラスメソッド(class method)
    • staticネストクラス(static nested classes)

  • インスタンスメンバ(instance member)
    static修飾子が無くインスタンスに所属
    • インスタンス変数(instance variable)
    • インスタンスメソッド(instance member)
    • インナークラス(inner classes)
}




4.インスタンスの生成とメンバの使用方法

インスタンスは以下のように作ります。
久々のnew演算子ですね。
インスタンスの生成
クラス名 インスタンス名 = new クラス名();

インスタンスメンバを呼び出すときはこうです。
インスタンスメンバの使い方
インスタンス名.メンバ名;



5.インスタンスを使ったサンプルコード


static が付いてないわ。
このクラスからインスタンスを
作るのね?
//Child_Ins.java
class Child_Ins{
    int num = 123;//num はインスタンス変数
    void method_01(){//method_01 はインスタンスメソッド
        System.out.println("This is instance of Child_Ins!");
    }
}

new演算子を
発見したっす!
//Sample16_12.java
class Sample16_12{

    public static void main(String[] args){
        Child_Ins child = new Child_Ins();//インスタンス生成
        System.out.println("child.num = " + child.num);
        child.method_01();
    }
}

 child が、Child_Insクラスのインスタンスです。
 child は、「Child_Insクラスのインスタンスメンバを持つクラス」のように
 振る舞います。

コマンドライン
>cd ws
ws>javac Sample16_12.java
ws>java Sample16_12
child.num = 123
This is instance of Child_Ins!
Child_Ins.java は自動的にコンパイルされます。




6.インスタンスを代入する変数


Child_Ins child = new Child_Ins();//インスタンス生成

クラスから生成されるインスタンスを代入する変数(ここでは child)は
生成元のクラス型(あるいは継承元のクラス型)になります。
サンプルプログラムでは「Child_Insクラス型」の変数というわけです。

この変数は、Stringなどと同じ、クラス型(参照型)変数です。
インスタンスが代入されるとインスタンスのメモリアドレスを格納します。

インスタンスを代入する変数の宣言
クラス名 変数名;

これ凄く不思議!
自分で作ったクラスの変数を作れるの?
そうなんだ。
私も最初は戸惑った。
オブジェクト指向でないプログラムでは
インスタンスが無いので、
それを受け取る変数もなかったんだ。
オブジェクト指向ならではの
変数の姿というわけっスね。


7.比較-クラスを直接使ったサンプルコード


比較のため、クラスを直接使った方法を以下に示します。
メンバは、static修飾子がついている「クラスメンバ」です。
「クラス名.メンバ名」クラスの形でメンバにアクセスします。
//Child_St.java
class Child_St{
    static int num_st = 123;//num_st はクラス変数
    static void method_st(){//method_st はクラスメソッド
        System.out.println("This is Child_St!");
    }
}

//Sample16_11.java
class Sample16_11{

    public static void main(String[] args){
        System.out.println("Child_St.num_st = " + Child_St.num_st);
        Child_St.method_st();
    }
}

コマンドライン
>cd ws
ws>javac Sample16_11.java
ws>java Sample16_11
Child_St.num_st = 123
This is Child_St!
Child_St.java は自動的にコンパイルされます。

インスタンスを使った場合と
比べてみてくれ。


8.クラスとインスタンスの比較


インスタンスを使うと、
クラスを直接使うのと比べて、実質
Child_Ins child = new Child_Ins();
の1行増えただけっスよねぇ。

ああ、そっか。
このサンプルだと、
クラスをそのまま使っても、
インスタンスを作っても、
大差ないな。
え~~?
すまんすまん。
インスタンスには、
クラスには無い使い方がある。
まずはもう少しインスタンスに慣れよう。



インスタンスには、インスタンスメンバしかありません。

お疲れ様でした。



© 2019 awasekagami