생성자(Constructor)
기본 생성자, 매개변수 있는 생성자
객체를 생성해주는 일을 한다.
소괄호가 붙은 건 모두 메소드이므로 생성자도 일종의 메소드이다.
★생성자 규칙★
생성자의 선언은 메소드 선언과 유사하나 ★반환 값이 없으며(void같은 걸 적지 않는다)★
★생성자명을 클래스명과 똑같이★ 지정해주어야 함
public User(String userId, String pwd, String name, Date date) {
userId = userId; // The assignment to variable userId has no effect
파란색은 전역변수, 연한 갈색은 지역변수인데 두 개의 이름이 같을 때 지역변수에 우선권을 주기 때문에 전부 연한 갈색이 된다.
이름을 같게 해도 되는 경우는 없을까? ==> this라는 레퍼런스 변수(참조 변수)
public class Academy {
private String name; // 필드
public Academy() {} // 기본 생성자
public Academy(String name) { // 매개변수 있는 생성자
this.name = name;
//필드의 name
}
}
this는 나 자신에 대한 주소값을 가지고 있다
this.userId라고 하면 지역변수가 아니라 내 필드에 있는 userId에 접근이 된다.
public User(){
System.out.println("User: " + this);
}
의 결과도 같다.
this() <== 생성자, 변수와 다르게 소괄호가 붙어있다.
같은 클래스의 다른 생성자를 호출할 때 사용하며 반드시 첫 줄에 선언
this() 사용 예시
public class Academy {
private int age;
private String name;
public Academy() {
this(20, "김철수"); // 원래 같으면 0이랑 null이 들어갈텐데
}
public Academy(int age, String name) {
this.age = age;
this.name = name;
}
}
this는 나, super는 내 부모