8.6 Object 클래스
-자바에서는 클래스를 정의할 때 명시적으로 부모 클래스를 선언하지 않으면
Object 클래스가 부모 클래스가 된다.
: 객체가 어떤 클래스로 생성되었는지에 대한 정보를 반환한다.
ex) 어떤 객체 타입을 가지고 있니?
-리플렉션 기법
객체가 자신을 만든 클래스에 대하여 물어보는 것.
class Circle { }
public class CircleTest {
public static void main(String[] args) {
Circle obj = new Circle();
System.out.println("obj is of type " + obj.getClass().getName());
System.out.println("obj의 해쉬코드=" + obj.hashCode());
}
}
// 출력
obj is of type test.Circle
obj의 해쉬코드=1554547125
우리가 println()을 사용하여 객체를 출력하면 객체의 toString() 메소드가 자동으로 호출된다.
=> 재정의하는 게 권장되는 이유
class Circle {
int radius;
public Circle(int radius) {
this.radius = radius;
}
public String toString() {
return "Circle(r="+radius+")";
}
}
public class CircleTest {
public static void main(String[] args) {
Circle obj = new Circle(10);
system.out.println(obj);
}
}
//출력
Circle(r=10)
: 객체의 내용을 검사하는 데 사용한다.
String (Object의 서브 클래스)
-String에서의 equals는 오버라이딩된 메소드이다.
(같은 클래스인지 판단X)
class Circle {
int radius;
public Circle(int radius) {
this.radius = radius;
}
public boolean equals(Circle c1) {
if ( radius == c1.radius )
return true;
else return false;
}
}
public class CircleTest {
public static void main(String[] args) {
Circle obj1 = new Circle(10);
Circle obj2 = new Circle(10);
if ( obj1.equals(obj2) )
System.out.println("2개의 원은 같습니다.");
else System.out.println("2개의 원은 같지 않습니다.");
}
}
//출력
2개의 원은 같습니다.
-Object 클래스의 finalize()에서는 아무것도 하지 않지만,
자식 클래스에서 재정의하여서 자원을 반납하는 등의 정리과정을 실행할 수 있다.
