アフィリエイト広告を利用しています
最新記事
カテゴリアーカイブ

2019年06月07日

コンストラクタから別のコンストラクタを呼ぶ

コンストラクタから別のコンストラクタを呼ぶ時には「this(引数)」を使います。
しかし、記述ルールがあるので、どこに書いてもいいというわけではないです。
「this()」は必ず、コンストラクタ内の先頭に書く!これが記述ルール。

class Demo {

 String s;
 int i;

 public Demo() {
  this.s ="引数なし";
  this.i = 1;
  System.out.println("コンストラクタ" + i + "は" + s + "のコンストラクタ。");
 }

 public Demo(String s, int i) {
  this();//引数なしのコンストラクタを呼び出すためのthisです。

  this.s = s;
  this.i = i;
  System.out.println("コンストラクタ" + i + "は" + s + "のコンストラクタ。");
 }

 public static void main(String[] args) {
  new Demo("引数あり", 2);
 }
}

引数ありのコンストラクタの先頭に引数なしのthis()を書いて
引数なしのコンストラクタを呼び出しています。


=============== 実行結果 ===============

コンストラクタ1は引数なしのコンストラクタ。
コンストラクタ2は引数ありのコンストラクタ。

========================================


引数なしのコンストラクタから引数ありのコンストラクタを
呼び出す時には、this()に引数を持たせます。


class Demo {

 String s;
 int i;

 public Demo() {
  this("引数あり", 2);//引数ありのコンストラクタを呼び出すためのthisです。

  this.s ="引数なし";
  this.i = 1;
  System.out.println("コンストラクタ" + i + "は" + s + "のコンストラクタ。");
 }

 public Demo(String s, int i) {
  this.s = s;
  this.i = i;
  System.out.println("コンストラクタ" + i + "は" + s + "のコンストラクタ。");
 }

 public static void main(String[] args) {
  new Demo();
 }
}


=============== 実行結果 ===============

コンストラクタ2は引数ありのコンストラクタ。
コンストラクタ1は引数なしのコンストラクタ。

========================================


newしてインスタンスを生成し、コンストラクタを呼び出します。
呼び出したコンストラクタ内の先頭にthis()が記述されていたら
this()で呼び出しているコンストラクタ内の処理を先に行われ
その後、呼び出し元のコンストラクタの処理を行われます。

地球の末路!?




検索