프로그래밍 언어/JAVA

[JAVA] 오버로딩과 오버라이딩

sujo 2020. 7. 26. 01:08

오버로딩 Overloading과 오버라이딩 Overriding

: 오버로딩과 오버라이딩은 자바에서 다형성을 이루는 방법들이다.

 

 

오버로딩 Overloading

한 클래스나 상속 관계에 있는 클래스들에 메소드의 이름은 같지만, 매개변수 타입이나 개수, 리턴 타입을 다르게 하여 메소드를 작성하는 방법.

*변수명이 다르더라도 매개변수의 타입과 개수가 같다면 같은 메소드로 취급하기 때문에 오류가 난다.

 

- 예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Book {
    void info(String title) {
        System.out.println("책 제목 : "+title+"\t저자 : 작가미상");
    }
    
    void info(String title, String author) {
        System.out.println("책 제목 : "+title+"\t저자 : "+author);
    }    
}
 
public class Main{
    public static void main(String[] args) {
        Book book = new Book();
        book.info("운영전");
        book.info("동물농장""조지 오웰");
    }
}
cs
[ 출력결과 ]

위의 코드는 책에 대한 정보(info())를 오버로딩을 사용하여 나타내었다.

String 타입이 하나면 '작가미상'이고,

String 타입이 두 개이면 각각 제목과 저자의 이름이다.

 

 

오버라이딩 Overriding

@Override

메소드 이름, 매개변수의 타입과 개수, 리턴 타입을 모두 동일하게 서브 클래스에서 재작성하는 방법이다. 

 

- 예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Hello {
    void print() {
        System.out.println("Hello!");
    }
}
 
class morning extends Hello{
    @Override
    void print() {
        System.out.println("Good Morning!");
    }
}
 
class afternoon extends Hello{
    @Override
    void print() {
        System.out.println("Good Afternoon!");
    }
}
 
class night extends Hello{
    @Override
    void print() {
        System.out.println("Good Night!");
    }
}
 
public class Main{
    public static void main(String[] args) {
        new Hello().print();
        new morning().print();
        new afternoon().print();
        new night().print();
    }
}
cs

 

[ 출력결과 ]

위 코드는 'Hello'라는 슈퍼 클래스를 상속받아 'print()'라는 메소드를 각 'morning', 'afternoon', 'ngiht' 클래스에서 재정의하여 사용하였다.

 

오버로딩 VS 오버라이딩(표)

비교요소 메소드 오버로딩 메소드 오버라이딩
선언 같은 클래스나 상속 관계에서 동일한 이름의 메소드 중복 작성 서브 클래스에서 슈퍼 클래스에 있는 메소드와 동일한 이름의 메소드로 재작성
관계 동일한 클래스 내 혹은 상속 관계 상속 관계
목적 이름이 같은 여러 개의 메소드를 중복 작성한다. 슈퍼클래스가 아닌 서브 클래스에서 새로운 기능의 메소드를 재정의하여 사용하기 위함
조건 메소드 이름은 동일하나 매개변수의 타입이나 개수가 달라야함. 메소드 이름, 매개변수 타입과 개수, 리턴 타입 모두 동일
바인딩 정적 바인딩 동적 바인딩

 

 

참고 서적

명품 자바 프로그래밍 -  황기태, 김효수 지음

 

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

[JAVA] Boolean형 배열 초기화  (0) 2020.08.02