모든 클래스가 Object 클래스를 상속 받는 이유는 다음과 같다.
- 공통 기능 제공
- 다형성의 기본 구현
모든 객체에 필요한 공통 기능을 제공한다. Object는 최상위 부모 클래스이기 때문에 모든 객체는 공통 기능을 편리하게 제공(상속) 받을 수 있다.
Object가 제공하는 기능
- toString() : 객체의 정보 제공
- equals() : 객체의 같음을 비교
- getClass() : 객체의 클래스 정보를 제공
- 기타 등등
Object 클래스는 다형성을 지원하는 기본적인 메커니즘을 제공한다. 모든 자바 객체는 Object 타입으로 처리될 수 있으며, 이는 다양한 타입의 객체를 통합적으로 처리할 수 있게 해준다.
Object
는 모든 객체를 대상으로 다형적 참조를 할 수 있다.
Object
는 모든 객체의 부모이므로 모든 객체를 담을 수 있다.Object
를 통해 전달 받은 객체를 호출하려면 각 객체에 맞는 다운캐스팅 과정이 필요하다
Object
가 세상의 모든 메서드를 알고 있는 것이 아니다.public String toString() {
return getClass().getName() + "@"
+ Integer.toHexString(hashCode());
}
Object
가 제공하는 toString()
메서드는 기본적으로 패키지를 포함한 객체의 이름과 참조값(해시코드)을 16진수로 제공한다.
public static void main(String[] args) {
Object object = new Object();
String string = object.toString();
//toString() 반환값 출력
System.out.println(string);
//object 직접 출력
System.out.println(object);
}
위 코드를 실행하면 출력값이 똑같이 나온다. 왜일까?
System.out.println()
메서드는 내부적으로 toString()
을 호출한다고 한다.
만약 내가 만든 객체 MyObject
에서 toString()
메서드를 재정의 한다면 내가 재정의한 toString()
에 맞게 출력값이 나온다.
기본적으로는 객체의 참조값이 나오게 된다.
인텔리제이를 사용하고 있기 때문에 toString() 을 간단하게 재정의 할 수 있다!
Dog dog = new Dog("복실이", 5);
String refValue = Integer.toHexString(System.identityHashCode(dog));
System.out.println("dog의 참조값: " + refValue);
참고로 toString()
을 재정의하면 객체의 참조값을 얻을 수 없는데,
System.identityHashCode()
을 사용하면 객체의 참조값을 얻어올 수 있고
Integer.toHexString()
을 사용해서 16진수로 표현할 수 있다.
- 김영한의 실전 자바 - 중급 1편을 공부하면서 작성했습니다.