新卒の初心者です。現在コンストラクタについて勉強しており、
同じクラスで定義された別のコンストラクタを呼び出すさいの処理について質問があります。
java
1 2 3/**犬クラス*/ 4public class Dog1903{ 5 private String gender; 6 private String breed; 7 8 9/**コンストラクタ(引数なし)*/ 10public Dog1903(){ 11 this.gender=''メス''; 12 this.breed=''ポメラニアン''; 13System.out.println(''引数なしのコンストラクタで犬を作成'') 14} 15 16/**コンストラクタ(引数あり)*/ 17public Dog1903(String gender,String breed){ 18this(); 19this.gender=gender ; 20this.breed=breed ; 21System.out.println(''引数ありのコントラクタで犬を作成''); 22} 23 24public void show(){ 25System.out.println(''性別は''+gender +''で、犬種は''+breed+''です''); 26} 27} 28
そして次にサンプル1903で引数ありのドッグクラスのコンストラクタだけ呼び出します。
Java
1 2public class Sample1903{ 3 4//オブジェクト生成し、引数ありのコンストラクタを呼び出す。 5Dog1903 dog=new Dog1903(''オス'',''秋田犬''); 6 7dog.show(); 8} 9} 10
こうした場合の実行結果として、
引数なしのコンストラクタで犬を作成
引数ありのコンストラクタで犬を作成
性別はオスで、犬種ら秋田犬です
と実行されます。
ドッグクラスの引数ありのコンストラクタのthis();で、引数なしのコンストラクタを呼び出しましたが、
なぜメスとポメラニアンは代入されず、Sample1903のオブジェクト生成時に代入した値が表示されるのでしょうか。