前回までの学びJAVA学習の記録⑤ 【オーバーロード】
目次
1.コンストラクター
2.this
3.デフォルトコンストラクター
コンストラクター
コンストラクターとは、インスタンスが生成されるタイミングで呼び出される特殊なメソッド。インスタンスを生成する際に必須の初期処理がある場合に使う。コンストラクターを使うと、インスタンス生成時に引数として初期値を渡すことができる。
これまでの処理
public class UseDog {
public static void main(String[] args) {
Dog pochi = new Dog(); //Dogのpochiインスタンスを生成
pochi.setName("ポチ"); //フィールドに名前を設定
pochi.setAge(5); //フィールドに年齢を設定
コンストラクターを使った場合
public class UseDog {
public static void main(String[] args) {
Dog pochi = new Dog("ポチ",5);
コンストラクターの定義
コントラクターの定義は、通常のメソッドの定義と似ているが、違いはメソッド名は必ずクラス名と同じにすること、戻り値の型の指定を書かないこと。
public Dog(String n, int a) {
//処理
}
アクセス修飾子 クラス名(引数の型 引数名) {
//処理
}
引数のないコンストラクターを呼び出す場合
public class Dog {
String name = "引数なしの場合";
public Dog() {
System.out.println(name);
}
public class DogConstructor {
public static void main(String[] args) {
Dog pochi = new Dog();
}
}
出力結果
引数なしの場合
引数のあるコンストラクターを呼び出す場合
public class Dog {
String name = "引数ありの場合";
public Dog(String name) {
System.out.println(name);
}
public class DogConstructor {
public static void main(String[] args) {
Dog pochi = new Dog("引数ありの場合に表示");
}
}
出力結果
引数ありの場に表示
このインスタンスを表すthisキーワード
コンストラクターでフィールドを初期化する時に、引数の変数名がフィールドの変数名と同じにできる。つまり、フィールド名と同じ名前のローカル変数が定義できる。***しかし、フィールド名と同じ名前のローカル変数がある場合、ローカル変数へのアクセスとなる。***フィールド名と同じ名前のローカル変数がある場合に、フィールドにアクセスしたいときは、明示的に「this.フィールド名」と記述する。
public class Dog {
private String name; //nameフィールド定義
private int age; //ageフィールド定義
public Dog(String name, int age) {
System.out.println(name); //nameは、引数で渡されたローカル変数nameを示す
System.out.println(this.name); //this.nameは、nameフィールドを示す
this.name = name; //引数で受けたローカル変数nameをnameフィールドに代入
this.age = age; //引数のローカル変数ageをageフィールドに代入
}
デフォルトコンストラクター
クラスに1つもコンストラクターが定義されていない時に、デフォルトコンストラクターというコンストラクターが暗黙的に追加される。デフォルトコンストラクターは、引数もなく、中の処理もないコンストラクターであるが、ないと引数なしでインスタンスを生成することはできない。引数のあるコンストラクターを追加した場合は、デフォルトコンストラクターは追加されない。
参考文献
「いちばんやさしいJAVAの教本」著者 石井真