クラスの基礎
コンストラクタ
インスタンス化するときに実行されるメソッドのこと[教科書P.137]。引数有りのコンストラクタを用意する(また、引数なしのコンストラクトを用意しない)ことによって、インスタンス化時にフィールドの値を設定する等の処理を行うことができる。
アクセス修飾子
メンバー(フィールド、メソッド)を、どこからアクセスできるか(読み書きできるか)を指定する[教科書P.137]。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package net.teachingprogramming.lecture04; public class Person { /** 名前 */ private String name; /** 体重[kg] */ private double weight; /** 身長[m] */ private double height; /** * コンストラクタ * @param name * @param weight * @param height */ Person(String name, double weight, double height) { this.name = name; this.weight = weight; this.height = height; } /** * 自己紹介するメソッド */ void selfIntroduction() { System.out.println("私の名前は" + name + "です。"); System.out.println("BMIは" + bmi() + "です"); } /** * BMIを計算するメソッド * @return BMI */ double bmi() { double x = weight / (height * height); return x; } } |
クラスを拡張する
あるクラスを元に、新しくクラスを作る(継承する)ことができる。元になるクラスを「スーパークラス」、継承したクラスを「サブクラス」という。継承するにはextendsキーワードを使う[教科書P.126]。
オーバーライド
スーパークラスで定義されたメソッドを、サブクラスで書き換える(上書き)することができる。これをオーバーライドという[教科書P.131]。元のメソッドとオーバーライトしたメソッドを区別するにはsuperキーワードを使う[教科書P.127]。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package net.teachingprogramming.lecture04; public class Teacher extends Person { /** 教えている教科 */ String kyouka = "英語"; /** * コンストラクタ */ Teacher(String name, double weight, double height) { super(name, weight, height); // スーパークラスのコンストラクタを呼ぶ } /** * スーパークラスのselfIntroductionをオーバーライド */ void selfIntroduction() { super.selfIntroduction(); System.out.println(kyouka+"を教えています。"); } /** * BMIの値から状態を判定 */ void bmiHantei() { if (bmi() > 22) { System.out.println("太り気味です。"); } else { System.out.println("太っていません。"); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package net.teachingprogramming.lecture04; public class Main { public static void main(String[] args) { Person person1 = new Person("ドラえもん", 129.3, 1.293); person1.selfIntroduction(); person1.name = "のび太"; // nameはprivateなのでエラーになる Person person2 = new Person("ドラミ", 91.0, 1.0); person2.selfIntroduction(); Person person3 = new Person(); // 引数なしのコンストラクタは用意されてないのでエラーになる。 Teacher teacher1 = new Teacher("たなか", 70.0, 1.75); teacher1.selfIntroduction(); teacher1.bmiHantei(); } } |