자바의 모든 클래스의 최상위 부모는 Object클래스이다
Object클래스의 toString()메소드는 객체의 주소를 String으로 반환해주는 메소드다
Object클래스의 equals()메소드는 두 객체간의 인스턴스비교 즉 주소값 비교,주소가 같으면 true,다르면 false반환
[Object클래스의 String toString()메소드]
:객체의 주소를 문자열로 반환
패키지명.클래스명@주소(16진수)
※toString()메소드 오버라이딩 시 반드시 hashCode()메소드도 오버라이딩하자
[Object클래스의 boolean equals()메소드]
: 비교 클래스의 인스턴스변수.equals(대상클래스의 인스턴스변수)
두 객체의 주소비교
class MyClass{
int data;
인자생성자
public MyClass(int data) {
this.data = data;
}////
실제 저장된 데이타가 반환되도록 만들기
즉 Object로부터 상속받은 toString()메소드 오버라이딩(재정의)하기! (주소값말고)
tip.이클립스에서 우클릭 source -> 오버라이딩소스 어쩌구 클릭하면 부모의메소드 바로 보여줌 그거로 내용만 바꾸면 아주 간편하게 오버라이딩 할 수 있음!!
@Override
public String toString() {
return String.valueOf(data); =>문자를 숫자로!! 요렇게 내용만 바꿈
}
실제 저장된 데이터를 비교하도록 equals(Object)메소드 오버라이딩하기!(주소비교말고)
@Override
public boolean equals(Object obj) {
if(obj instanceof MyClass) { =>타입이 myclass면 요것도 이렇게 내용만 바꿈!
MyClass mc = (MyClass)obj;
if(this.data == mc.data)return true;
else return false;
}
return false; =>타입이 myclass가 아닐경우
}
String getAddress() {
return super.toString();
}
}
class Point{
int x,y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
문제 x=10,y=20 처럼 반환하도록 toString()메소드를 오버라이딩하기
@Override
public String toString( ) {
return String.format("x=%s,y=%s",x,y);
}
문제 저장된 x좌표와 y좌표가 같은지 비교하도록 equals()메소들를 오버라이딩 하여라
@Override
public boolean equals(Object obj) {
if(obj instanceof Point) {
Point pt = (Point)obj;
if(this.x==pt.x && y==pt.y)
return true;
}
return false; // 타입이 point가 아닌경우
}
}
public class ObjectClass {
public static void main(String[] args) {
MyClass mc1 = new MyClass(10);
MyClass mc2 = new MyClass(10);
System.out.println("[두 객체의 toString()호출]");
System.out.println(mc1);
System.out.println(mc1.toString());
System.out.println(mc1.getClass().getName()+'@'+Integer.toHexString(mc1.hashCode()));
System.out.println(mc2);
System.out.println(mc2.toString());
System.out.println(mc2.getClass().getName()+'@'+Integer.toHexString(mc2.hashCode()));
System.out.println("[두 객체를 equals()메소드로 비교]");
System.out.println(mc1 == mc2 ? "Same":"Different"); //주소비교
System.out.println(mc1.equals(mc2)? "같다":"다르다"); //실제값 비교로 오버라이딩
System.out.println(mc1.getAddress());
System.out.println(mc2.getAddress());
Point point1 = new Point(10,20);
Point point2 = new Point(10,20);
System.out.println("[toString 호출]");
System.out.println(point1);
System.out.println(point2);
System.out.println("[equals() 호출]");
System.out.println(point1.equals(point2));
'학원 > JAVA' 카테고리의 다른 글
10/5 15-2 figureApp (추상화연습) (1) | 2022.10.05 |
---|---|
10/5 15-1 추상클래스 (0) | 2022.10.05 |
10/4 14-8 Type Casting (0) | 2022.10.04 |
10/4 14-7 instanceof 연산자 (0) | 2022.10.04 |
10/4 14-6 이질화와 동질화 (0) | 2022.10.04 |