Object 클래스

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

그렇게 설계한 이유

  • 공통 기능 제공

  • 다형성의 기본 구현

Object를 활용한 다형성의 한계

  • Object는 모든 객체를 대상으로 다형적 참조를 할 수 있다.

    • Object는 모든 객체의 부모이므로 모든 객체를 담을 수 있다.

  • Object를 통해 전달 받은 객체를 호출하려면 각 객체에 맞는 다운캐스팅 과정이 필요하다.

Object가 제공하는 기능

  • toString()

    public String toString() {
     return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

    Object 가 제공하는 toString() 메서드는 기본적으로 패키지를 포함한 객체의 이름과 객체의 참조값(해시 코드)를 16진수로 제공한다

  • 객체의 같음을 비교하는 equals()

  • getClass()

  1. child.toString() 을 호출한다.

  2. 먼저 본인의 타입인 Child에서 toString()을 찾는다.

  3. 없으므로 부모 타입인 Parent에서 찾는다.

  4. 없으므로 부모 타입인 Object에서 찾는다. toString()이 있으므로 호출한다.

상속 관계에서 부모와 자식 클래스의 인스턴스 생성

상속 관계에서 자식 클래스가 생성될 때 부모 클래스의 생성자가 먼저 호출이 된다. 부모 클래스의 생성자가 먼저 호출이 되어, 메모리에 변수와 메서드가 먼저 생성되어 있어야 자식 클래스에서 이를 가져와 사용할 수 있기 때문이다.

super() -> 자식 생성자 순서

JVM은 런타임에 실제 객체 타입을 확인한다. 실제 객체 타입에 해당하는 클래스 정보를 확인한 후 메서드 테이블을 본다. 그 클래스에 오버라이딩된 메서드가 있다면 해당 메서드를 실행하고 없다면 부모 클래스인 메서드 테이블로 올라가 부모 테이블의 메서드를 사용한다.

위 동일성 비교 x, 동등성 비교가 필요한 경우!

Last updated