Java 클래스 생성자
생성자는 무조건!!! 클래스와 이름이 같아야 한다 void 타입도 적으면 안돼
#한번에 생성자 생성 하는 방법
Source => Generate Constructor field 선택
#생성자
생성자 메소드 이름이 클래스와 같아야한다.
리턴 타입이 반드시 없어야 한다. (*void도 없어야한다.)
public class Car {
Car(){ // default 생성자 : parameter가 없음
default 생성자의 접근 제한자는 클래스 선언 형태를 따른다.
이경우에는 Car 클래스가 public 이니까 생성자도 public이다.
}
Car(int a){ //파라미터 있는 생성자 조건 2개만 만족하면 무조건 생성자
생성자 메소드 이름이 클래스와 같아야하고, 리턴 타입이 없어야한다
}
void Car(){ //리턴타입(void 포함) 있으면 생성자가 아니다.
}
car(){ //대소문자 달라도 생성자 아니다
}
}
초기화 작업을 수행한다.
객체를 생성하면 알아서 호출된다.
만약 생성자를 적지 않아도 컴파일러가 default 생성자를 자동으로 하나 넣어준다.
생성자를 계속 추가하면서 만들 수 있다.
//default 생성자가 아닌경우에는
//parameter 있는 생성자
Car(int num){
this.num=num; //prarmether가 우선순위가 잴 높아서 그냥 적으면 되는데 field 는 this 로 구분을 해주어야 한다.
}
Car(int number){
num=number; //이름을 바꾸면 this를 안적어도 괜찮지만 변수 이름이 많아지면 복잡해지기 때문에 보통은
this를 붙여서 맞춰 쓴다.
}
//객체 생성
Car c1 = new Car(1234);
#생성자 기본 구조
//default 생성자
int num;
String model;
String owneer;
public Car() { //2가지 조건이 다 충족한다 default 생성자
System.out.println("Car 생성자");
}
// parameter 있는 생성자
public Car(int num) {
this.num = num; //this.num <- 클래스 안에 있는 num을 지정하고 싶어서 사용한다.
}
//prarmether가 우선순위가 잴 높아서 그냥 적으면 되는데 field 는 this 로 구분을 해주어야 한다.
this 변수를 사용하기 싫으면
Car(int number){
num=number; //이름을 바꾸면 this를 안적어도 괜찮지만 변수 이름이 많아지면 복잡해지기 때문에
보통은 this를 붙여서 맞춰 쓴다.
}
public Car(int num, String model) {
this.num = num;
this.model = model;
}
public Car(int num, String model, String owner) {
this.num = num;
this.model = model;
this.owner = owner;
}
Car c1=new Car(); //default 생성자가 호출된다.
Car c2=new Car(4); // public Car(int num) 생성자가 호출된다. 그래서 4을 넘겨주면 4가 num에 저장된다.
Car c3=new Car(5,"BMW"); // public Car(int num, String model) 생성자가 호출된다
Car c4=new Car(6,"HUN","MIN"); //쓰고 싶은 생성자를 이용한다.
#생성자가 여러개 있는 경우에 하는 일이 겹칠때 this() 메소드
this():생성자 안에서만 사용이 가능하다. =>생성자안에서 사용되면서 다른 생성자를 호출함
int num; String model;
String owner;
Car() {
//num=0;
this(0); //parameter 개수랑 타입을 보고 어느 생성자를 호출할지 결정한다.
}
public Car(int num) {
//this.num = num;
this(num,"xyz"); //모자른 parameter 개수를 채우기 위해 쓰레기값 넣어줌
}
public Car(int num, String model) {
//this.num = num;
//this.model = model;
this(num,model,"anonymous");
}
public Car(int num, String model, String owner) {
this.num = num;
this.model = model;
this.owner = owner;
}
//이런 경우에 num이 계속 겹친다.
그럼 똑같은 일을 하는 다른 생성자 한테 일을 넘긴다
=====================================================================================================
public class CarUser{
Car c1 = new Car();
//Car c1 =new Car(1);
//Car c2 =
System.out.println(c1.num +" "+ c1.model+" "+c1.owner);
만약 이런식으로 호출을 하면
default 생성자에서 this() 함수로 같은 일을 하는 생성자가 있는지 찾아본다.
public Car(int num) {
//this.num = num;
this(num,"xyz"); //모자른 parameter 개수를 채우기 위해 쓰레기값 넣어줌
}
그럼 이런식으로 기본생성자 일도 하면서 num 변수에 값을 설정하는 생성자에게 일을 넘긴다
....
이런식으로 계속 넘기다보면 더 넘길수 없는 생성자가 나오는데 이제 그 생성자를 불러서 값을 초기화 시켜준다
public Car(int num, String model, String owner) {
this.num = num;
this.model = model;
this.owner = owner;
}
}
출력값 : 0 xyz anonymous
'JAVA > JAVA 기본 문법' 카테고리의 다른 글
[JAVA]-Java #접근수식어 (접근지정자, 접근 제한자) (0) | 2019.01.19 |
---|---|
[JAVA]-Java #Method Overloading (0) | 2019.01.19 |
[JAVA]-Java 클래스 (0) | 2019.01.19 |
[JAVA]-Java 다차원 Array (0) | 2019.01.19 |
[JAVA]-Java Operation(메소드) (0) | 2019.01.19 |