Object 는 모든 클래스의 부모 클래스이다. 따라서 Object 는 모든 객체를 참조할 수 있다.
예제를 통해서 Object 의 다형성에 대해 알아보자.
Dog 와 Car 은 서로 아무런 관련이 없는 클래스이다. 둘다 부모가 없으므로 Object 를 자동으로 상속 받는다.
package lang.poly;
public class Car {
public void move() {
System.out.println("Car.move");
}
}
package lang.poly;
public class Dog {
public void sound() {
System.out.println("Dog.sound");
}
}
package lang.poly;
public class ObjectPolyExample1 {
public static void main(String[] args) {
Car car = new Car();
Dog dog = new Dog();
Object object = car;
action(dog);
action(car);
}
public static void action(Object object) {
if (object instanceof Car car) {
car.move();
} else if (object instanceof Dog dog) {
dog.sound();
}
}
}
Dog.sound
Car.move
Object를 활용한 다형성의 한계
이번에는 Object 배열을 알아보자.
Object 는 모든 타입의 객체를 담을 수 있다. 따라서 Object[] 을 만들면 세상의 모든 객체를 담을 수 있는 배열을 만들 수 있다.
package lang.poly;
public class ObjectPolyExample2 {
public static void main(String[] args) {
Dog dog = new Dog();
Car car = new Car();
Object object = new Object();
Object[] objects = {dog, car, object};
size(objects);
}
private static void size(Object[] objects) {
System.out.println("전달된 객체의 수는: " + objects.length + "개 입니다.");
}
}
만약 Object 와 같은 개념이 없다면 어떻게 될까?
물론 Object 가 없어도 직접 MyObject 와 같은 클래스를 만들고 모든 클래스에서 직접 정의한 MyObject 를 상속 받으면 된다. 하지만 하나의 프로젝트를 넘어서 전세계 모든 개발자가 비슷한 클래스를 만들 것이고, 서로 호환되지 않는 수 많은 XxxObject 들이 넘쳐날 것이다.