パパの勉強部屋

勉強の記録をつけています。Java、ネットワーク、Excel、etc.

スッキリわかるJava入門 第8章 インスタンスとクラス②

第8章 インスタンスとクラス②

クラス定義により可能になる2つのこと

  • ①そのクラスに基づいて、インスタンスを生成できるようになる。
  • ②そのクラスから生まれたインスタンスを入れる変数の型が利用できるようになる。
  • たとえば、Heroクラスを定義するとHero型の変数が利用できるようになる。
  • クラスを定義することで利用可能になる型のことをクラス型(class type)と言う。

クラス型変数とは

  • int型やString型は、Javaが標準で準備しており、いつでも使える型。
  • Heroクラスを定義することで、「Heroクラスから仮想世界に生みだされたインスタンスを入れることができるHero型」が使えるようになる。
  • クラスを定義すればJavaで利用可能な型の種類はどんどん増えていく。

クラス型変数が必要な理由

  • 仮想世界内に複数存在しうる同名インスタンスの中から、特定の1つをプログラム的に識別するため。
  • たとえば、定義済みのクラスHeroから2つの勇者インスタンスを生み出した。
  • 仮想世界の中では2人の勇者を識別する方法がないが、それぞれ変数h1とh2に入っていれば、「h2の勇者に眠れという指示を送る」とプログラムを書けばよい。

インスタンスの生成方法

  • クラス名 変数名 = new クラス名();

public class Main {
  public static void main(String[] args) {
    // 1.勇者を生成
    Hero h = new Hero();
  }
}

  • 実際にインスタンスを生成しているのは、右辺の「new Hero()」という部分で、どれをHero変数に代入している。

インスタンスのフィールド利用

  • 変数名.フィールド名 = 値;

public class Main {
  public static void main(String[] args) {
    // 1.勇者を生成
    Hero h = new Hero();
    // 2.フィールドに初期値をセット
    h.name = "ミナト";
    h.hp = 100;
    System.out.println("勇者" + h.name + "を生み出しました!");
  }
}

インスタンスのメソッド呼び出し

  • 3.勇者のメソッドを呼び出してゆく を参照

public class Main {
  public static void main(String[] args) {
    // 1.勇者を生成
    Hero h = new Hero();
    // 2.フィールドに初期値をセット
    h.name = "ミナト";
    h.hp = 100;
    System.out.println("勇者" + h.name + "を生み出しました!");
    // 3.勇者のメソッドを呼び出してゆく
    h.sit(5);
    h.slip();
    h.sit(25);
    h.run();
  }
}

  • 着目するのは、mainメソッドの内容が「まるで冒険物語のシナリオ台本みたい」でわかりやすい点。
  • オブジェクト指向でなければ、mainメソッドの中に、いつくものHP計算処理や繰り返しSystem.out.println()を呼び出していた。

インスタンス利用のまとめ

  • インスタンスの生成にはnewを使う。
  • フィールドを利用する場合は「変数名.フィールド名」で利用する。
  • メソッドを呼び出す場合は「変数名.メソッド名()」を使う。

オブジェクト指向のクラスは現実世界と繋がっている

  • 6章までのクラス(HelloWorldなど)も「文法的には正しいクラス」だが、「クラスを何のために用いるか」という思想が伴っているか否かに決定的な違いがある。
  • 6章までのクラスは、「メソッドが大きくなってきた」「機能単位でクラスを分ける」など、開発者の都合や機能の単位などでクラスやメソッドを作ってきた。
  • Heroクラスは、「オブジェクト指向」という明確な思想に基づいてクラスやメソッドが作られている。
  • オブジェクト指向を意識したプログラム開発とは「現実世界の人や物、出来事をクラスに置き換えていく」作業にほかならない。
  • 現実に似せて作り、現実に似せて動かしていく、これがオブジェクト指向の根本的な思想。