생성자의 이름은 클래스 이름과 같다. 일반 메소드와 다른점은 생성사는 반환값을 가지지 않는다.
생성자는 주로 필드에 초기값을 부여할 때 많이 사용되지만 특별한 초기화 절차를 수행할 수 있다.
<aside> 💡 생성자도 메소드이기 때문에 메소드 오버로딩을 사용할 수 있음
</aside>
예제 1번
package ex04;
class Pizza {
int size;
String type;
public Pizza() {
size = 12;
type = "슈퍼슈프림";
}
public Pizza(int s, String t) {
size = s;
type = t;
}
}
public class PizzaTest {
public static void main(String[] args) {
Pizza obj1 = new Pizza();
System.out.println("(" + obj1.type+ ", " + obj1.size + ")");
Pizza obj2 = new Pizza(24, "포테이토");
System.out.println("(" + obj2.type + ", " + obj2.size + ")");
}
}
위의 코드에서 생성자는 Pizza()와 Pizza(int s, String t)이다.
생성자를 사용자가 만들지 않았다면 자동으로 기본 생성자를 만들어서 모든 멤버 변수들을
기본값으로 초기화함
예제
package ex04;
class Box2 {
//이자리에 기본 생성자가 생성됨
int width, height, depth;
}
public class BoxTeat {
public static void main(String[] args) {
Box2 b = new Box2();
System.out.println(b.width + " " + b.height + " " + b.depth);
}
}
//0 0 0
만약 생성자를 사용자가 추가 하였을 경우에는 이미 생성자가 존재하기 때문에
컴파일러가 기본 생성자를 추가하여 주지 않음
package ex04;
class Box2 {
//이자리에 기본 생성자가 생성됨
int width, height, depth;
//사용자 정의 생성자
public Box2(int w, int h, int d) {
width = w;
height = h;
depth = d;
}
}
public class BoxTeat {
public static void main(String[] args) {
Box2 b = new Box2(); //오류
System.out.println(b.width + " " + b.height + " " + b.depth);
}
}