카테고리 없음
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은 같습니다.