[JAVA] 다형성이란

하나의 객체로 다양한 데이터 타입을 가질 수 있어서 다양한 동작을 수행할 수 있게 합니다.

 

다형성의 세 가지 형태

1. 메서드 오버로딩 : 같은 이름의 메서드를 여러 개 정의하고, 매개변수의 타입, 개수, 순서를 다르게 하여 다양한 입력에 대응할 수 있도록 하는 것입니다.

public class Calculator {
	// 정수 두 개를 더하는 메서드
    int add(int a, int b) {
        return a + b;
    }

    // 실수 두 개를 더하는 메서드
    double add(double a, double b) {
        return a + b;
    }

    // 문자열 두 개를 합치는 메서드
    String add(String a, String b) {
        return a + b;
    }
}

 

2. 메서드 오버라이딩 : 부모 클래스가 정의한 메서드를 자식 클래스에서 재정의하여 사용하는 것입니다. 동일한 메서드 이름을 가진 서로 다른 클래스의 객체가 각자의 클래스에 맞게 다른 동작을 수행할 수 있습니다.

class Parent {
    void showName() {
        System.out.println("parent name");
    }
}

class Child extends Parent {
    @Override
    void showName() {
        System.out.println("child name");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.showName();
    }
}

 

3. 객체의 다형성 : 부모 클래스 타입의 참조 변수를 사용하여 여러 하위 클래스의 객체를 참조하는 것입니다.

class Parent {
    void showName() {
        System.out.println("parent name");
    }
}

class ChildA extends Parent {
    @Override
    void showName() {
        System.out.println("childA name");
    }
}

class ChildB extends Parent {
    @Override
    void showName() {
        System.out.println("childB name");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent ca = new ChildA();
        ca.showName();
        Parent cb = new ChildB();
        cb.showName();
    }
}

Parent 클래스에서 showName이라는 메서드가 자식 클래스에서 오버라이딩되어서 다양한 내용으로 출력되고 있습니다.

실제 객체의 타입에 따라서 오버라이딩된 메서드가 호출됩니다.