OOP - 오버라이딩 vs 오버로딩

devdo·2022년 1월 4일
0

Java

목록 보기
24/56
post-thumbnail

자바 면접에서 정말 많이 물어보는 유형이라고 하는 오버라이딩 vs 오버로딩
이번 기회에 제대로 알아보기 위해 정리해봅니다.

오버라이딩(Overriding)

부모 클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것을 말합니다.
상속받은 메서드를 그대로 사용할 수 있지만, 자식 클래스에서 상황에 맞게 변경(뒤집어씌운다는 개념:복제)해야 하는 경우 오버라이딩이 필요합니다.

오버라이딩의 조건

오버라이딩은 부모 클래스의 메서드를 자식클래스 가 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메서드의 이름, 파라미터, 리턴값이 모두 같아야 합니다.

코드

package test;

public class OverrigingTest {

    public static void main(String[] args) {
        Person person = new Person();

        Man man = new Man();
        Woman woman = new Woman();

        person.act();
        man.act();
        woman.act();

    }

}

class Person{
    void act() {
        System.out.println("dodododo");

    }
}

class Man extends Person{
    @Override
    void act() {
//            super.act();
        System.out.println("zzzzzzzzzz");
    }
}

class Woman extends Person{
    @Override
    void act() {
//            super.act();
        System.out.println("eeeeeeeeee");
    }
}

<결과>

dodododo
zzzzzzzzzz
eeeeeeeeee

오버로딩(Overloading)

한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 메서드 시그니쳐(매개변수의 개수,타입, 리턴타입)을 다르게하여 같은 이름을 사용해서 메소드를 정의할 수 있습니다.(확장)

오버로딩 조건

메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다.

주의할 점
1) '리턴 값만' 다른 것은 오버로딩을 할 수 없습니다.
2) 오버로딩은 오버라이딩과 다르게 상속하는 것과는 상관이 없습니다.
3) 메서드 말고도 생성자에서도 오버로딩이 됩니다.

코드

package test;

public class OverloadingTest {
    public static void main(String[] args) {
        OverloadingMethods om = new OverloadingMethods();

        om.pratice();
        System.out.println(om.practice(3));
        om.practice("hello world!");
        System.out.println(om.practice(1, 2));
    }
}


 class OverloadingMethods{
     void pratice() {
        System.out.println("pratice1");
    }
    // 리턴값만 다른 것은 오버로딩 허용안됨
//     String pratice() {   
//         System.out.println("pratice1");
//         return "pratice-리턴값만 다른 것";
//     }

     String practice(Integer num) {
         System.out.println("pratice2");
         return num.toString();
     }

     void practice(String str) {
         System.out.println("practice3");
         System.out.println(str);
     }

     String practice(Integer num1, Integer num2) {
         System.out.println("pratice4");
         return num1.toString() + num2.toString();
     }
}

<결과>

pratice1
pratice2
3
practice3
hello world!
pratice4
12
profile
배운 것을 기록합니다.

0개의 댓글