오버로딩이란 객체 생성시 생성자 함수를 같은 이름으로 여러개 정의함으로써
각기 다른 매개변수를 받으면서 같은 이름의 함수를 호출하는 것을 의미함.
코드:
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
|
public class Book {
String title;
String author;
void show() {
System.out.println(title + "/" + author);
}
public Book() {
this("","");
System.out.println("생성자 1호출됨");
}
public Book(String title) {
this(title, "작자미상");
System.out.println("생성자 2호출됨");
}
public Book(String title, String author) {
this.title = title;
this.author = author;
System.out.println("생성자 3호출됨");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Book littlePrince = new Book("어린왕자", "생텍쥐페리");
Book loveStory = new Book("춘향전");
Book emptyBook = new Book();
littlePrince.show();
loveStory.show();
emptyBook.show();
}
}
|
cs |
실행결과:
설명:
위의 book함수를 보면
public Book()
public Book(String title)
public Book(String title, String author)
이렇게 세 개의 생성자 함수를 갖고 있다.
Book littlePrince = new Book("어린왕자", "생텍쥐페리");
이 코드는 세번째 생성자 함수를 호출했다.
Book loveStory = new Book("춘향전");
두번째 생성자 함수를 호출한 코드인데 실행 결과를 보면 생성자 3이 먼저 호출 된것을 알 수있다.
이유는
public Book(String title) {
this(title, "작자미상");
System.out.println("생성자 2호출됨");
}
두번째 생성자 함수를 호출하면 this()함수를 이용하여 자기 자신을 또 호출하게 되는데, 이 때
this(title, "작자미상");
String매개변수를 두개 받으므로 이는 세번째 생성자 함수이다. 그래서 생성자3이 호출된 것이다.
밑에도 마찬가지.