-생성자 (constructor)
객체변수에 값을 무조건 설정해야만 객체가 생성될 수 있도록 강제하는 방법
메소드명 = 클래스명 & 리턴 자료형이 없는 메소드
package Constructor;
public class DeepBlue2 extends Blue {
public DeepBlue2(String name) {
this.setName(name);
}
생성자의 규칙
1. 클래스명과 메소드명이 동일하다
2. 리턴타입을 정의하지않음.
생성자는 객체가 생성(=new라는 키워드로 객체가 만들어질 때.) 될 때 호출.
public static void main(String[] args) {
DeepBlue2 deepBlue = new DeepBlue2("개강싫어"); //DeepBlue2의 새로운 객체 : deepBlue
//위에서 만든 생성자는 문자열을 필요로하는 생성자이므로 new키워드로 객체를 만들 때 문자열 꼭 전달해줘야함.
-> public DeepBlue2(String name) {
System.out.println(deepBlue.name);
}
}
//처음 출력값 : null ; why? 객체 변수에 아무런 값도 설정하지 않았기때문.
//코딩하기에 따라 객체 변수 name에 값을 설정할 수도, 아닐 수도 있음
//최종 출력값 : 개강싫어
근데 굳이 이런거 왜 쓰는거임?
setName("DeepBlue")와 같은 필수적인 것들을 객체를 만들 때 제어할 수 있기 때문에 쓴댄다..
솔직히 아직 잘 안와닿음;;
-Default Constructor (초기 생성자) : 한마디로 텅~빈 생성자
public class DeepBlue extends Blue{
public DeepBlue() {
} //얘가 디폴트 생성자
//얘 없으면 컴파일러가 지 알아서 디폴트 생성자 만듦.
//근데 이렇게 내가 생성자 하나라도 만들면 추가 ㄴㄴ 함
public void vlavla(){
System.out.println(this.name + "ㅋㅋ");
}
}
디폴트 생성자 만들면 new 사용해서 새로운 객체 만들어질 때 실행됨.
-생성자 오버로딩
package Constructor;
public class LightBlue extends Blue {
public LightBlue(String name) {
this.setName(name);
}
public LightBlue(int num) {
if (num == 1){
this.setName("one");
} else if (num == 2) {
this.setName("two");
}
}
이렇게 여러개의 다른 생성자를 만들 수 있음. (이름 같아도 ㄱㅊ 입력항목만 다르면 됨. )
public static void main(String[] args) {
LightBlue lightBlue = new LightBlue("개강싫어");
LightBlue what = new LightBlue(1);
System.out.println(lightBlue.name);
System.out.println(what.name);
}
}
//output : 개강싫어 \n one
'Language > JAVA' 카테고리의 다른 글
다형성(오버라이드,오버로드)/객체 형변환/암묵적 형변환 (0) | 2021.08.08 |
---|---|
클래스, getter그리고setter, 접근한정자 (0) | 2021.08.01 |
JAVA Inheritance (0) | 2021.07.28 |
Method (0) | 2021.07.27 |
클래스와 메소드 (0) | 2021.07.27 |