[Java] overloading vs. overriding

한결·2023년 7월 18일

Java

목록 보기
1/5

개요

overloading


이름은 같지만 시그니처(파라미터 수, 타입)는 다른 메소드를 중복으로 선언하는 것

overriding


부모 클래스의 메소드의 동작 방법을 변경하여 우선적으로 사용하는 것

overloading

같은 메소드라도 매개변수만 다르면 얼마든지 정의하고 사용 가능

특징

  • 메소드 이름이 같아야 함!
  • return 달라도 됨
  • 파라미터 개수가 달라야 함
  • 파라미터 개수 같을 시 데이터 타입 반드시 달라야함

예시

public class Overloading {
    public static void main(String[] args) {
        overloading(1);
        overloading(1,2);
        overloading();
        overloading("Hi");
    }

    static void overloading(int n) {
        System.out.println(n);
    }
    static void overloading(int n, int m) {
        System.out.println(n + m);
    }

    static void overloading() {
        System.out.println("매개변수 없음");
    }

    static void overloading(String word) {
        System.out.println(word);
    }
}
  • 위처럼 호출 매개변수에 따라 매칭되어 해당 함수를 실행시킴

overrding

상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술

특징

  • 오버라이드 하고 자 하는 메소드가 상위 클래스에 존재해야함
  • 메소드 이름이 같아야 함
  • 메소드 파라미터 개수, 파라미터 자료형이 같아야함
  • 메소드 리턴형이 같아야 함
  • 상위 메소드와 동일하거나 내용이 추가되어야 함

예시

  • 부모
public class OverrridingParent {

    String location;
    String name;

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        System.out.println(this.name + "은 " + this.location + "의 시간을 사는 중이라 전해");
    }
}
  • 자식
public class OverridingSon extends OverrridingParent{
    String react;

    public String getReact() {
        return react;
    }

    public void setReact(String react) {
        this.react = react;
    }

    public void print() {
        System.out.println(this.name + "은 " + this.location + "의 시간을 사는 중이라 전해" + this.react);
    }
}
  • 실행
public class Overrding {
    public static void main(String[] args) {
        OverridingSon yehoon = new OverridingSon();

        yehoon.setName("Yehoon");
        yehoon.setLocation("파리");
        yehoon.setReact("!!!!!!!!!!!!!!!!!!!!");

        yehoon.print();
    }
}
// Yehoon은 파리의 시간을 사는 중이라 전해!!!!!!!!!!!!!!!!!!!!

오버라이딩을 통해 하나의 코드로 여러 객체를 처리 가능

정리

overloading

  • 한 클래스 내에, 여러 개의 같은 이름의 메소드를 정의하는 것
  • 메소드 이름을 통일해서 프로그램 가독성 증가 시킬 수 있음

overriding

  • 부모로부터 받은 메소드의 로직을 변경하는 것
  • 객체지향 언어의 특징인 다형성 중 하나

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

아주 유익한 내용이네요!

답글 달기