引数が異なるコンストラクタ

広告

メソッドの場合と同様に、引数の数や型が異なるものであれば、1つのクラスの中に複数のコンストラクタを記述できます。

では実際に試してみます。

ctest10.java

class ctest10{
  public static void main(String args[]){
    Television tv1 = new Television("居間");
    tv1.dispChannel();

    Television tv2 = new Television();
    tv2.dispChannel();
  }
}

class Television{
  private int channelNo;
  private String place;

  Television(){
    channelNo = 1;
    place = "未定";
  }

  Television(String newPlace){
    channelNo = 1;
    place = newPlace;
  }

  public void setChannel(int newChannelNo){
    channelNo = newChannelNo;
  }

  public void dispChannel(){
    System.out.println("現在のチャンネルは" + channelNo+ "です");
    System.out.println("設置してある場所は" + place + "です");
  }
}

実際に実行してみると下記のようになります。

p4

コンストラクタからコンストラクタを呼び出す

またコンストラクタから他のコンストラクタを呼び出すこともできます。その場合の記述方法は下記のようになります。

クラス名(){
  this(引数);
}

クラス名(引数){
  ....
}

コンストラクタの中から他のコンストラクタを呼び出す場合には、thisを使って「this(引数)」の形で呼び出します。ここで引数とは呼び出したいコンストラクタで指定されている引数を記述します。

先ほどのサンプルを書き直すと下記のようになります。

class Television{
  private int channelNo;
  private String place;

  Television(){
    this("未定");
  }

  Television(String newPlace){
    channelNo = 1;
    place = newPlace;
  }

  public void setChannel(int newChannelNo){
    channelNo = newChannelNo;
  }

  public void dispChannel(){
    System.out.println("現在のチャンネルは" + channelNo+ "です");
    System.out.println("設置してある場所は" + place + "です");
  }
}

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。