오버로딩 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 |
---|