4. 메서드 오버로딩
4.1 메서드 오버로딩이란?
한 클래스 내에 같은 이름의 메서드를 매개변수를 다르게 해서 여러개 정의 하는것.
4.2 오버로딩의 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.
4.3 오버로딩의 예
1 | void println(); |
매개 변수의 타입과 개수가 같아서 오버로딩 성립 안하는 예
1
2int add(int a, int b){ return a+b;}
int add(int x, int y){ return x+y;}리턴 타입만 다른 경우 오버라이딩 성립 안함
1
2int add(int a, int b){ return a+b;}
int add(int a, int b){ return (long) a+b;}- 같은 매개변수를 순서만 바꿔서 작성하면 오버로딩이지만 헷갈리는 좋지 않은 방법
1
2int add(int a, long b){ return a+b;}
int add(long a, int b){ return a+b;}
- 같은 매개변수를 순서만 바꿔서 작성하면 오버로딩이지만 헷갈리는 좋지 않은 방법
4.4 오버로딩의 장점
- 동일 기능의 메서드가 하나의 이름으로 정의될 수 있음
- 메서드 이름 절약가능
5. 생성자(Constructor)
5.1 생성자란?
인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
- 생성자의 이름은 클래스의 이름과 같아야함
- 생성자는 리턴 값이 없음
- new 연산자가 인스턴스를 생성하는것이지, 생성자가 인스턴스를 생성하는것은 아님
5.2 기본 생성자(default constructor)
생성자를 안 만들어도 컴파일러가 기본으로 생성자 하나 만들어줌.
publid 클래스이름(){};
1 | class Data1{ |
5.3 매개변수가 있는 생성자
인스턴스 생성할때 초기값을 넣어 초기화 할 수 있음1
2
3
4
5
6
7
8
9
10
11
12class Car{
String color;
String gearType;
int door;
Car(){}
Car(String c, String g, int d){
color= c;
gearType = g;
door =d;
}
}
이렇게 사용하면 됨1
Car c = new Car("white", "auto", 4};
5.4 생성자에서 다른 생성자 호출하기 - this(), this
같은 클래스 내에서 생성자도 아래 조건을 만족 할 경우 서로 호출이 가능함
- 생성자의 이름으로 클래스 이름 대신 this를 사용한다.
한 생성자엥서 다른 생성자를 호출할 때는 반드시 첫줄에서만 호출이 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class Car{
String color;
String gearType;
int door;
Car(){
this("white", "auto", 4);
}
Car(String color){
this(color, "auto", 4}
Car(String color, String gearType, int door){
this.color= color;
this.gearType = gearType;
this.door =door;
}
}this - 인스턴스 자신을 가리키느 ㄴ참조변수, 인스턴스의 주소가 저장되어있다.
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.- this.(), this(매개변수) - 생성자, 같은 클래스의 다른 생성자를 호출 할 때 사용한다.
5.5 생성자를 이용한 인스턴스 복사
동일한 현재 상태를 갖는 인트턴스 하나 더 생성할때 생성자를 사용함.
어떤 상태인지 자세히 몰라도 똑같은 인스턴스 새로 추가 가능.
1
2
3
4
5Car(Car c){
color= c.color;
gearType = c.gearType;
door =c.door;
}
1 | class Car{ |
*** 인스턴스를 생성할 때는 아래 두가지 사항을 결정해야함
- 클래스 - 어떤 클래스의 인스턴스를 생성할 것인가?
- 생성자 - 선택한 클래스의 어떤 생성자로 인스턴스를 생성할것인가?