質問するログイン新規登録

回答編集履歴

1

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

2020/10/01 19:53

投稿

swordone
swordone

スコア20675

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