回答編集履歴

1

オーバーロードになっています

2020/10/01 19:53

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -3,3 +3,47 @@
3
3
  おおもとのObjectクラスにおいては、具体的な比較内容が存在しないため、便宜上同一性と同じ内容でequalsを定義しているだけの話です。
4
4
 
5
5
  Sampleクラスにおいては、フィールド変数numが同じであれば等しいと見なそう、という形でequalsを定義しているのです。
6
+
7
+
8
+
9
+ ### 10/2追記
10
+
11
+ よく見ると、これオーバーライドではなくオーバーロードなのですね。
12
+
13
+ 今、Sampleクラスには
14
+
15
+ - Objectクラスから継承したequals(Object)
16
+
17
+ `==`で比較するのと同じ効果のメソッド
18
+
19
+ - Sampleクラスで新たに定義したequals(Sample)
20
+
21
+ フィールド変数で比較するメソッド
22
+
23
+
24
+
25
+ の2つのequalsメソッドが共存している形になります。
26
+
27
+ ```java
28
+
29
+ import model.*;
30
+
31
+
32
+
33
+ public class MyApp {
34
+
35
+ public static void main(String[] args){
36
+
37
+ Object a = new Sample(10);
38
+
39
+ Object b = new Sample(10);
40
+
41
+ System.out.println(a.equals(b));
42
+
43
+ }
44
+
45
+ }
46
+
47
+ ```
48
+
49
+ このコードではSampleオブジェクトがObject型に入っているため、呼び出されるequalsメソッドは前者のものになります。そうなると、当然異なるオブジェクトであるaとbに対してはfalse判定となります。