Javaにもコンストラクタがあるのか。。って思ってたら
Javaにはデフォルトコンストラクタなるものがらしい。
デフォルトコンストラクタ
下記を参考にさせていただいた
引用すると
クラス名(){ }
見て頂くと分かりますが、引数無しで中身が空のコンストラクタが作成されます。中身が空ですので何もしません。
ふーむ何もしないのか。
しかし、同じく注意書きがあった点。
引数無しのコンストラクタを記述したのであれば問題無いのですが、引数無しのコンストラクタを定義せず、
引数があるコンストラクタだけ記述した場合にもデフォルトのコンストラクタは作成されないため、
引数無しでそのクラスのオブジェクトを作成する事が出来なくなりますので注意して下さい。
ほーなるほど。
コンストラクタを作成するのであれば引数無し版は必ず作っておいたほうがいいっぽい、、?
サンプルコード
get_set.java
public class get_set { public static void main(String[] args) { Human a1 = new Human(); System.out.println(a1.getName()); Human a2 = new Human("manko"); System.out.println(a2.getName()); a2.setName("chinko"); System.out.println(a2.getName()); } }
Human.java
public class Human { private String name; Human() { name = "unko"; } Human(String s) { name = s; } // Getter public String getName() { return name; } // Setter public void setName(String s) { this.name = s; } }
unko manko chinko
javaって#include
みたいなの無くてもコンパイル通るんですね。。どうなってんの?
3/11/2020 追記
引数無しのコンストラクタを作成した場合、そのコンストラクタから定義済みコンストラクタを呼ぶことができるらしい!
たとえば上記のHuman
クラスだと下記みたいにthis
を使う。
こーすることでString型の引数を持つコンストラクタに引数なしコンストラクタからcallすることができる!(興奮気味)
なので、下記のsoutのdisplay順番は、Constructor 2 is called -> Constructor 1 is calledとなる。
public class Human { private String name; Human() { this("unko"); System.out.println("constructor 1 is called") } Human(String s) { name = s; System.out.println("constructor 2 is called") } // omitted