ごきげんよう、財布を忘れたまんじゅうです。
サザエさんじゃないです、まんじゅうです。
昨日スピーチでヒッチハイクで日本縦断した話をしたのですが、
今日ピョコさんは自転車で日本制覇した話をしてくれました。
同期で2人も日本を巡っているという……
きっと明日担当きゃのんさんも日本一周の話をしてくれるでしょう。
同期ほんと色んな人がいて面白いです。
JavaとSQLの研修を一通り終え、資格取得に向け勉強しているのですが、
結構事細かいことを問われることが多く、かなり苦戦しております。
昨日頭を悩ませた問題はこちら。
public class Sample { private int num; private String name; public Sample(int num, String name) { this.num = num; this.name = name; } public boolean equals(Object obj) { if (obj == null) { return false; } if (obj instanceof Sample) { Sample s = (Sample) obj; return s.num == this.num; } return false; } }
このクラスを利用する以下のプログラムを、
コンパイル、実行したときの結果として、正しいものを選びなさい。
public class Main { public static void main(String[] args) { Sample a = new Sample(10, "a"); //① Sample b = new Sample(10, "b"); //② System.out.println(a.equals(b)); //③ } }
A.「true」と表示される
B.「false」と表示される
C. Sampleクラスでコンパイルエラーが発生する
D. Mainクラスでコンパイルエラーが発生する
E. 実行時に例外がスローされる
さぁみなさんどれが答えだと思いますか?
早速、一緒に見ていきましょう。
public class Main { public static void main(String[] args) { Sample a = new Sample(10, "a"); //①変数aでサンプルインスタンス生成、値「10, a」を代入 Sample b = new Sample(10, "b"); //②変数bでサンプルインスタンス生成、値「10, b」を代入 System.out.println(a.equals(b)); //③サンプルインスタンスaとbをequalsメソッドで判定 } }
まず、Sampleクラスを変数名 a、b でインスタンスを生成し、
フィールドに値「 10, a 」、「 10 , b 」を代入します。
そしてサンプルインスタンスをequalsメソッドで判定します。
さぁ続いて、Sampleクラス見ていきましょう。
public class Sample { private int num; private String name; public Sample(int num, String name) { this.num = num; this.name = name; } public boolean equals(Object obj) { //④equalsメソッドのオーバーライド if (obj == null) { return false; } if (obj instanceof Sample) { Sample s = (Sample) obj; return s.num == this.num; } return false; } }
equalsメソッドは全クラスの祖先にあたるObjectクラスに、
もともと以下のように定義されています。
public boolean equals(Object obj) { return (this == obj); }
しかし今回処理内容が変わっていますよね。
これはequalsメソッドをオーバーライドしているからです。
それゆえ、Sampleクラスのequalsの処理が行われるわけです。
そう、なので……
答えは A.「true」と表示される というわけでした。
みなさん、正解していましたか?
一つ一つ問題を理解して解いていくのは時間を要しますが、
講師をはじめ先輩、同期たちが分かるまで優しく教えてくれるので、
これからもテストに向けて頑張ろうと思います。
それでは今日はここらへんで、また会いましょう。アデュー!