Javaマスターへの道 資格勉強編 Part22
みなさんお久しぶりです。
時間が経つのは早く、私がこのブログを最後に更新したのも
一ヶ月前になってしまいましたが、今日から改めて今日から再び歩みを進めていこうと思います。
今日やるテーマはズバリ「継承」です。
継承にはいろいろ細かいルールがあるのでひとつずつプログラムを動かしながら確認していきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Super { int id; String name; Super() {}; Super(int id, String name) { this.id = id; this.name = name; } void getInfo() { System.out.println("id : " + id); System.out.println("name : " + name); } void getInfo(String word) { System.out.println("I am " + word + "desu"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Sub extends Super { Sub(int id, String name) { System.out.println("ok"); } public static void main(String[] args) { //Super super = new Super(1, "arai"); Why1 Super super1 = new Super(1, "takai"); //Sub sub = new Sub(); Why2 Sub sub = new Sub(1, "takasugi"); //super.getInfo(); Why3 super1.getInfo(); sub.getInfo(); } } |
いきなりどでかいプログラムを貼ってしまい申し訳ありません。
ただ今回みなさんに見ていただきたいのはSubクラスでコメントアウトしているところだけです。
why1から3まではコメントアウトを外すとコンパイルエラーになってしまいます。
なぜコンパイルエラーになるか以下で解説していきます。
why1を見てみましょう
Superクラスのインスタンスをnewしているだけですが、実は変数名に問題があります。
変数名には予約語と言われるJava君が大事にしている言葉は使えないことになっています。
今回のSuperも予約語のひとつなので変数名として使えず、コンパイルエラーになります。
次はwhy2です
とてもシンプルです。
コンストラクタがありません。
失礼しましたコンストラクタはありますね、引数ありのやつが。
今回の式では引数に何もないデフォルトコンストラクタを定義していないので
コンパイルエラーとなってしまいます。
最後はwhy3ですが少し説明を加えます。
これは変数名.メソッド名の形でメソッドを使おうとしています。
そうです変数名に、、、と今日はここまでです。
次回も継承についてやっていこうと思います。
お楽しみに!