2013年9月9日月曜日

オブジェクト指向基礎

Java初心者  オブジェクト指向基礎 No.1

参考書籍 : わかりやすいJava オブジェクト指向編[川場 隆]

1. クラスには2つの機能
  • プログラムを実行する
  • オブジェクトを定義するだけ
2. オブジェクト
  • 値とメソッドをひとつにまとめたもの
3. 継承
  • 既存のクラス定義を利用して新しいクラスを定義する
4. カプセル化
  • オブジェクトの独立性・安全性を高める機能
5. ポリモーフィズム
  • 同じメソッドでもオブジェクトの種類により違う動作をする

クラス作成 == 型を新しく作るって事

お弁当をクラス化してみる…
中身は主食2品、副菜3品の枠があるとしよう(・ω・)うちのお弁当と一緒!
   public class BoxLunch(){
    String main_1;
    String main_2;
    String sub_1;
    String sub_2;
    String sub_3;
   }
  
この定義した変数達それぞれをフィールド変数というみたい。 ( =インスタンス変数、メンバ変数とも言う ) 基本定義には具体的な値はいれない。初期値を指定したい場合はコンストラクタを使用して行う。
コンストラクタ(構築者という意味)
new演算子がオブジェクトを作成した直後、コンストラクタが起動してオブジェクトに具体的な値をセットする
コンストラクタで初期値を指定してみる
    • public → どこからでも使用できる
    • protected → 継承先でも使用できる
    • private → そのクラス内で使用できる
   public class BoxLunch(){
    
    String main_1;
    String main_2;
    String sub_1;
    String sub_2;
    String sub_3;
    
    //コンストラクタ *****************
    public BoxLunch( 引数なくてもOK ){
     main_1 = "米";
     main_1 = "ハンバーグ";
     sub_1 = "卵焼き";
     sub_2 = "切干大根の煮付け";
     sub_3 = "ひじきの煮物";
    }
    // *************************
   }
  
今回は、リテラル(定数)で初期化しました。
引数を渡してあげてもOK。
また、コンストラクタは複数書けるんだって。へぇ (コンストラクタのオーバーロード)
   public class BoxLunch(){
    
    String main_1;
    String main_2;
    String sub_1;
    String sub_2;
    String sub_3;
    
    //コンストラクタ 1 これデフォルト*****************
    public BoxLunch(){
     main_1 = "米";
     main_1 = "ハンバーグ";
     sub_1 = "卵焼き";
     sub_2 = "切干大根の煮付け";
     sub_3 = "ひじきの煮物";
    }
    // ************************************
    
    
    //コンストラクタ 2*****************
    public BoxLunch( String main, String sub2, String sub3 ){
     main_1 = "米";
     main_1 = main;
     sub_1 = "卵焼き";
     sub_2 = sub2;
     sub_3 = sub3;
    }
    // ************************************
   }
  
米と卵焼き以外のものを突っ込みたい時はコンストラクタ2を使って初期化しちゃう。みたいな。
作ったクラスのインスタンスを作る
弁当つくる為に弁当箱を用意しよう(^3^)
   
   ( BoxLunch ) box = new BoxLunch();//弁当箱を用意(インスタンス)
   //米を炊き忘れていたので中身を急遽変更することに…
   box.main1 = "パン";
   box.main2 = "ハム";
   box.sub_1 = "バナナ";
   box.sub_2 = "ヨーグルト";
   box.sub_3 = "ジャム(?)";
  
  
インスタンスメソッド
値とメソッドをひとつにまとめたものとあったように、関数も書ける
   
   public class BoxLunch(){
    
    String main_1;
    String main_2;
    String sub_1;
    String sub_2;
    String sub_3;
    
    //コンストラクタ 1 これデフォルト*****************
    public BoxLunch(){
     main_1 = "米";
     main_1 = "ハンバーグ";
     sub_1 = "卵焼き";
     sub_2 = "切干大根の煮付け";
     sub_3 = "ひじきの煮物";
    }
    // ************************************
    
    //弁当を食べる為にはあけないといけないので
    public void openBox(){
     System.out.println( box.main1 );
     System.out.println( box.main2 );
     System.out.println( box.sub_1 );
     System.out.println( box.sub_2 );
     System.out.println( box.sub_3 );
    }
    
   }
   
  
   
   BoxLunch box = new BoxLunch();//弁当箱を用意(インスタンス)
   //米を炊き忘れていたので中身を急遽変更することに…
   box.main1 = "パン";
   box.main2 = "ハム";
   box.sub_1 = "バナナ";
   box.sub_2 = "ヨーグルト";
   box.sub_3 = "ジャム(?)";
   
   box.openBox();//オブジェクトの中にある関数を参照演算子(.)で呼び出す。
   //わーぃご飯の時間だね\(^O^)/
  
  
クラスメソッドとインスタンスメソッドの違いは、staticキーワードをつけるかどうかだけのようです。
   
   public class BoxLunch(){
    
    String main_1;
    String main_2;
    String sub_1;
    String sub_2;
    String sub_3;
    
    //コンストラクタ 1 これデフォルト*****************
    public BoxLunch(){
     main_1 = "米";
     main_1 = "ハンバーグ";
     sub_1 = "卵焼き";
     sub_2 = "切干大根の煮付け";
     sub_3 = "ひじきの煮物";
    }
    // ************************************
    
    //弁当を食べる為にはあけないといけないので
    public void openBox(){
     System.out.println( box.main1 );
     System.out.println( box.main2 );
     System.out.println( box.sub_1 );
     System.out.println( box.sub_2 );
     System.out.println( box.sub_3 );
    }
    
    //弁当を奈良の鹿に取られた、…あげた。
    public static void presentBoxLunch(){
     main_1 = "";
     main_1 = "";
     sub_1 = "";
     sub_2 = "";
     sub_3 = "";
    }
    
   }
   
  
newしたインスタンスにはpresentBoxLunchは含まれず、box.presentBoxLunch();感じには使用できません。 staticの時はnewせずに使用できます。
 BoxLunch.presentBoxLunch();
 いきなり鹿に取られては、newしてる暇もないですもんね(;_;)

0 件のコメント:

コメントを投稿