카테고리 없음

Ex9_1 :eqauls()

푸곰주 2022. 3. 22. 17:40

 

 

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package ex9;
 
public class Ex9_1 {
 
    public static void main(String[] args) {
        Value v1 = new Value(10);
        Value v2 = new Value(10);
        
        if(v1.equals(v2))
            System.out.println("v1과 v2는 같습니다.");
        else
            System.out.println("v1과 v2는 다릅니다.");
    
        //조상(리모콘0개) - > 자손객체(리모콘1개) ok
        Value0 v0 = new Value0();
        //cf        = new Value(10); 하면 결과는 같게나옴.
        //Value0 v0 = new Value(10);
        //자식 -> 부모로 되었다가, equals에서 원래자식은 부모에서 자식으로 형변환가능
        //가르키는 객체가 자식객체인데 타입만 부모리모콘
        //가르키는 객체자 자식객체이므로 타입이 부모리모콘이여도 다시 자식리모콘으로 형변환가능
        //리모콘객수 > 객체iv갯수 불가능 but 이경우는 가르키는객체가 자식이였으므로
        //다시 형변환시 흠..가능하다??
        //리모콘변경 사용할수잇는 멤버의 갯수가 줄었다가 늘었다가....객체는그대로임
        if(v0.equals(v1))
            System.out.println("v0와 v1은 같습니다.");
        else
            System.out.println("v0과 v1는 다릅니다.");
    
        Value2 v22 = new Value2(10);
        if(v22.equals(v2))
            System.out.println("v22와 v1은 같습니다.");
        else
            System.out.println("v22과 v1는 다릅니다.");
    
    }    
 
}
 
class Value extends Value0{
    int value;
    
    Value(int value){
        this.value = value;
    }
    
    
    //Object의 equals()를 오버라이딩해서 주소가 아닌 value를 비교.
    public boolean equals(Object obj) {
        //참조변수의 형변환 전에는 반드시 instanceof로 확인해야함
        //참조변수가 obj타입, 무엇이들어올지모름 모든객체가 다들어올수있음.
        
        if(!(obj instanceof Value))
            return false;
        
        Value v = (Value)obj; //obj를 value로 형변환
        //obj는 value가 없음 형변환을 해줘야함. obj를 value로...
        
        //형변환을 해줘야 value로 쓸수있다. ㅠㅠ근데 원래 obj자체에는 value리모콘이없는데
        //부모에서 자식으로 되는건데 어떻게 value를 사용할수있찌?
        //복습다시하자...;;;;;;;;
        
        //instanceof 로 value타입으로 형변환가능한것만 선별한거??
        return this.value==v.value;
        
        
        //원래 이렇게되어있음. return this==obj;    //주소비교, 서로다른객체는 항상거짓
    }
}
 
class Value0 {}
 
class Value2 extends Value{
 
    Value2(int value) {
        super(value);
        // TODO Auto-generated constructor stub
    }}
 
 
cs

v1과 v2는 같습니다.
v0과 v1는 다릅니다.
v22와 v1은 같습니다.