Object 클래스는 모든 클래스의 부모 클래스이다.
따라서 모든 객체를 참조할 수 있다.
package lang.object.poly;
public class Car {
public void move() {
System.out.println("자동차 이동");
}
}
package lang.object.poly;
public class Dog {
public void sound() {
System.out.println("멍멍");
}
}
package lang.object.poly;
public class ObjectPolyExample1 {
public static void main(String[] args) {
Dog dog = new Dog();
Car car = new Car();
action(dog);
action(car);
}
public static void action (Object obj) {
// obj.sound(); // 컴파일 오류, Object는 sound()가 없다.
// obj.move(); // 컴파일 오류, Object는 move()가 없다.
// 객체에 맞는 다운캐스팅 필요
if (obj instanceof Dog dog) {
dog.sound();
} else if (obj instanceof Car car) {
car.move();
}
}
}
Object 클래스는 모든 객체의 부모이다.
따라서, 어떤 객체든지 언제든지 인자로 전달 할 수 있다.
action(dog) //main에서 dog 전달
void action(Object obj = dog(Dog)) //Object는 자식인 Dog 타입을 참조할 수 있다.
action(car) //main에서 car 전달
void action(Object obj = car(Car)) //Object는 자식인 Car 타입을 참조할 수 있다.
action(dog) //main에서 dog 전달
private static void action(Object obj) {
obj.sound(); //컴파일 오류, Object는 sound()가 없다. }
action() 메서드 안에 obj를 호출하면 컴파일 에러가 발생한다.
매개변수인 obj는 Object 타입이기 때문이다.
Object 안에는 sound 메서드가 존재하지 않다.
따라서, 해당 문제를 해결하기 위해서는 다운캐스팅을 진행해야한다.
다형성을 제대로 활용하려면 다형적 참조와 메서드 오버라이딩을 활용해야한다.
Object 클래스는 모든 객체를 대상으로 다형적 참조를 할 수 있다.
Object 타입만으로는 자식 클래스 고유 기능을 직접 사용할 수 없다.
결국 각 객체의 기능을 활용하기 위해서는 다운 캐스팅이 필요하다.
Object는 모든 객체를 참조할 수 있지만, Object 타입에 정의된 기능만 사용할 수 있기 때문에 각 객체의 고유 기능을 사용하려면 다운캐스팅이 필요하다.