Object 클래스

자바에서 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스이다.

다음 그림과 예제 코드를 보자.

image.png

 package lang.object;
//부모가 없으면 묵시적으로 Object 클래스를 상속받는다.

  public class Parent {
      public void parentMethod() {
          System.out.println("Parent.parentMethod");
      }
  }

항상 어떤 경우든 최상위 부모는 Object 가 된다. 부모가 없으면 묵시적으로 Object 클래스를 상속받는다. 앞의 코드는 다음 코드와 같다.

package lang.object;
//extends Object 추가

public class Parent extends Object {
    public void parentMethod() {
        System.out.println("Parent.parentMethod");
		}
}

클래스에 상속 받을 부모 클래스가 없으면 묵시적으로 Object 클래스를 상속 받는다.

package lang.object;
public class Child extends Parent {
   public void childMethod() {
       System.out.println("Child.childMethod");
		}
}

클래스에 상속 받을 부모 클래스를 명시적으로 지정하면 Object 를 상속 받지 않는다. 쉽게 이야기해서 이미 명시적으로 상속했기 때문에 자바가 extends Object코드를 넣지 않는다.

→ 결과적으로 모든 자바 클래스의 최종 부모는 항상 Object 클래스가 된다. 부모 따라가다보면 언젠가는 상속 안받는 애가 있을 것이고 이는 Object 를 상속받는다.

묵시적(Implicit) vs 명시적(Explicit) 묵시적: 개발자가 코드에 직접 기술하지 않아도 시스템 또는 컴파일러에 의해 자동으로 수행되는 것을 의미 명시적: 개발자가 코드에 직접 기술해서 작동하는 것을 의미

package lang.object;

public class ObjectMain {
    public static void main(String[] args) {

        Child child = new Child();
        child.childMethod();
				child.parentMethod();

				// toString()은 Object 클래스의 메서드
				String string = child.toString();
				System.out.println(string);

		}
}

예제에서 toString()Object 클래스의 메서드이다. 이 메서드는 객체의 정보를 제공한다. → Child 는 Parent 를 상속받았고 Parent 는 위에 Object 가 있기 때문에 호출 가능하다. 따라서 Object 의 toString() 을 받을 수 있었던 것.

실행 결과

  Child.childMethod
  Parent.parentMethod
  lang.object.Child@X001

toString 은 쉽게 얘기해 객체에 대한 정보를 제공해주는 것. 뒤에서 자세하게 설명할 예정. 지금은 객체에 대한 정보를 반환하는 것이라 이해.

현재 출력 결과는 child 는 java.lang.object 패키지에 있는 Child 이고 얘의 인스턴스는 X001 라는 클래스명과 인스턴스 정보를 제공해주는 것. → 객체 정보 제공