Java

Overloading / Overriding

비번변경 2021. 9. 22. 19:43
다형성 (polymorphism)
하나의 객체가 여러 가지 타입을 가질 수 있는 것
객체 지향 프로그래밍을 구성하는 특징 중 하나다.

Overloading / Overriding은 Java의 다형성을 지원하는 방법이다. 각 개념은 아래와 같다.

 

Overloading

사전적으로 '초과로 적재하다'라는 의미이다.

Java에서는 클래스 내에 같은 이름의 메서드를 여러 개 선언하는 것을 의미하며, 매개변수의 타입, 개수, 순서 중 하나가 달라야 한다. 매개변수가 동일한 경우에는 반환형이 달라도 오버로딩되지 않는다.

출처 : 신용권, 이것이 자바다, 한빛미디어(2019), p230

하나의 함수가 하나의 기능을 구현해야 하는 C와 달리, 하나의 메소드명으로 여러 기능을 구현한다.

 

예시

print문을 오버로딩한 클래스다.

public class Overloading {
    String atttribute;

    public Overloading() {
        this.atttribute = "init";
    }

    public void setAtttribute(String atttribute) {
        this.atttribute = atttribute;
    }

    public String getAtttribute() {
        return this.atttribute;
    }

    public void print() {
        System.out.println(this.atttribute);
    }

    public void print(String str) {
        System.out.println(str + getAtttribute());
    }
}

public class main {
    public static void main(String args[]) {
        Overloading overloading = new Overloading();

        overloading.print();
        overloading.print("attribute value : ");
    }
}

 

실행 결과

 

Overloading 테스트

 

Overriding

클래스 상속 시 부모 클래스의 메서드가 자식 클래스에 맞지 않을 경우, 자식 클래스에 동일한 메서드를 재정의하는 것을 말한다. 오버라이딩된 부모 클래스의 메서드는 숨겨지기 때문에 자식 객체에서 메서드를 호출하면 오버라이딩된 자식 클래스의 메서드가 호출된다.

오버라이딩된 메서드는 부모의 메서드와 반환형, 메서드명, 매개변수가 동일해야 하며, 더 강한 접근 제한은 지정할 수 없다. 즉, public 메서드를 private 메서드로 오버라이딩할 수는 없다. 또한 새로운 예외를 던질 수는 없다.

 

예시

Overloading 클래스를 상속받아 print 메소드를 오버라이딩했다.

public class Overriding extends Overloading{
    @Override
    public void print() {
        System.out.println("overriding method");
    }
}

public class main {
    public static void main(String args[]) {
        Overriding overriding = new Overriding();
        
        overriding.print();
    }
}

 

실행 결과

 

Overriding 테스트

 

728x90