객체 지향 프로그래밍 - 다형성

다형성이란?

  하나의 인터페이스나 메소드가 다양한 방식으로 작동할 수 있게하는 특성이다. 주로 '오버로딩', '오버라이딩'을 통해 구현된다.

 

- 오버로딩(Overloading) : 같은 이름의 메소드가 있지만, 매개변수의 유형이나 개수가 다르면 서로 다른 메소드로 취급하여 다양한 작업을 수행할 수 있다.

- 오버라이딩(Overriding) : 자식 클래스에서 부모 클래스의 메소드를 재정의(오버라이드)하여 사용할 수 있다. 이를 통해 동일한 인터페이스가 다른 행동을 할 수 있다.

 

 예를들어 'Animal'클래스가 있고 이를 상속받는 'Dog', 'Cat' 클래스가 있을 때, 동물들은 소리를 낸다는 공통적인 특징을 가지고있지만, 내는 소리는 다르다. 그래서 'Animal' 타입의 참조 변수를 사용하여 상속받은 클래스의 객체를 다룬다. 참조 변수로 'makeSound' 메소드를 호출하면, 참조된 객체의 실제 타입에 딸 ㅏ각기 다른 소리가 출력된다.

class Animal {
    void makeSound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("멍멍");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("야옹");
    }
}

 

Animal myDog = new Dog();
Animal myCat = new Cat();

myDog.makeSound(); // 출력: 멍멍
myCat.makeSound(); // 출력: 야옹