LoginSignup
3
2

More than 5 years have passed since last update.

Java - クラス・インスタンス生成 Part.2

Last updated at Posted at 2018-11-12

記事の書かれ方について

授業スライドとかを参考にしてるわけじゃないので、別の切り口から説明されてると思うけど。
たぶん言ってることはあっている(はず)。

アドリブなのでミスがあるかもしれないのであったら教えて!

4部構成です

Part.1 さっくりインスタンス生成をしてみる
Part.2 コンストラクタを使ってもっとすっきり ←イマココ
Part.3 アクセス制御をして、入ってくる値を制限しよう
Part.4 クラス変数・メソッドを使ってみる

つなぎ

Part.1では、デジタル学生証をクラスとして書いて、田中くんと野口くんの学生証をインスタンスとして作ってあげた。
今回もそのコードを使いまわしていく。

DigitalStudentCard.java
class DigitalStudentCard{
  //学籍番号
  int num;

  //お名前
  String name;

  //出力する用のメソッド(自己紹介してもらう)
  String getSelfIntroduction(){
    return "学籍番号 : " + num + " 名前 : " + name);
  }
}
class UseClass{
  public static void main(String[] args){

    //インスタンス生成
    DigitalStudentCard tanaka = new DigitalStudentCard();

    //インスタンス変数へ代入
    tanaka.num = 118114;
    tanaka.name = "田中角栄";


    //別のインスタンスを生成
    DigitalStudentCard noguchi = new DigitalStudentCard();

    //新たに作ったインスタンスの変数へ代入
    noguchi.num = 118514;
    noguchi.name = "野口英世";

    //出力
    System.out.println(tanaka.getSelfIntroduction);
        // 学籍番号 : 118114 名前 : 田中角栄

    System.out.println(noguchi.getSelfIntroduction);
        // 学籍番号 : 118514 名前 : 野口英世
  }
}

今回はこれらのコードをもっとスマートに書くためにコンストラクタというものを使ってみよう。

コンストラクタとはなんじゃろな?

コンストラクタはインスタンスが生成されるときに1回だけ呼ばれるメソッドのこと。
Processingのvoid setup()関数がアプリの起動時に一度だけ実行される関数であったようにこいつもそんな感じ。

インスタンスを生成するときに、一緒に値をぶち込みたいな~とか思ったときに使う。

書いてみる

DigitalStudentCardにコンストラクタを追加してみる。
後から入れるのはめんどくさいので、インスタンス生成するときにnumnameを設定できるように

コンストラクタはクラスの名前をそのままベーっと書くことで実装できる。
引数を受け取りたければ、メソッドと同じように仮引数を書いてやればよい。

DigitalStudentCard.java
class DigitalStudentCard{
  //学籍番号
  int num;

  //お名前
  String name;

  //コンストラクタ
  DigitalStudentCard(int num, String name){
    //引数のnumをインスタンスのnum(this.num)へ代入
    this.num = num;

    //同じく
    this.name = name;
  }

  //出力する用のメソッド(自己紹介してもらう)
  String getSelfIntroduction(){
    return "学籍番号 : " + num + " 名前 : " + name);
  }
}

こいつを使うときは、new DigitalStudentCard()のところで引数を与える。

class UseClass{
  public static void main(String[] args){

    //インスタンス生成
    DigitalStudentLicense tanaka = new DigitalStudentCard(118114, "田中角栄");

    //別のインスタンスを生成
    DigitalStudentLicense noguchi = new DigitalStudentCard(118514, "野口英世");

    //出力
    System.out.println(tanaka.getSelfIntroduction);
        // 学籍番号 : 118114 名前 : 田中角栄

    System.out.println(noguchi.getSelfIntroduction);
        // 学籍番号 : 118514 名前 : 野口英世
  }
}

コンストラクタを使うことで、さらにコードを短くすることができた。

ちなみに

コンストラクタはメソッド同様にオーバーロードできるので、複数書いて処理を分岐させることができる。

DigitalStudentCard.java
class DigitalStudentCard{
  //学籍番号
  int num;

  //お名前
  String name;

  //コンストラクタ
  DigitalStudentCard(int num, String name){
    //引数のnumをインスタンスのnum(this.num)へ代入
    this.num = num;

    //同じく
    this.name = name;
  }

  DigitalStudentCard(){
    //Part.1と同様の使い方もできるようにする。
  }

  //出力する用のメソッド(自己紹介してもらう)
  String getSelfIntroduction(){
    return "学籍番号 : " + num + " 名前 : " + name);
  }
}

次回

次はアクセス修飾子をやっていくぞぅ!
つぎ → Part.3 アクセス制御をして、入ってくる値を制限しよう

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2