자바가 만들어놓은 API중에서 최상위 클래스이다. root라고도 한다. 모든 사용자가 만든 클래스는 배열을 포함해서 Object로부터 상속받는다.
그렇기 때문에 모든 클래스는 Object클래스의 메서드를 사용할 수 있다. 대표적으로 toString() 같은 것이 존재한다.
클래스를 설계할 때 기본적으로 생략 된 코드 3곳이 있다.
A라는 클래스를 만들었을 때 첫번째로 모든 클래스는 Object가 상속 된다. 그리고 lang이라는 디폴트 패키지가 있다. 그리고 생성자가 생략되어있다.
A의 부모가 Object라는 사실을 알면 나중에 객체를 생성할때 Object를 이용해서 객체를 만들수 있을 것이다.
Object obj = new A();
. toString()이라는 메소드는 부모가 가지고있고 재정의를 했기때문에 toString을 호출하는 것은 가능하지만 A클래스 안에 display()는 불가능하다. (upcasting)
이런식으로 생성해서 display()에 접근할 수 있는 방법은 downcasting이다. ((A)obj).display();
자문자답
질문: 오버라이드할때 부모메서드가 가지고 있는 기능을 쓰면서, 기능을 추가하는 방법은?
답변: super.메서드() + 구현하고 싶은 기능
클래스를 배열에도 담을수있다.
Object[] o = new Object[2]
라는 배열을 선언했다.
그러면 o[0] = new A();
o[1] = new B();
이렇게 선언할 수 있다.
만약 A와 B 객체 내에 go()
라는 메서드가 있다면,
for(int i = 0; i < o.length; i++) {
if(o[i] instanceof A) {
((A)o[i]).go();
} else {
((B)o[i]).go();
}
}
이런식으로 downcasting해서 사용할 수도 있다.