개발/JAVA
[JAVA] 생성자
경주초이
2020. 6. 15. 21:16
Animal.java
public class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
Dog.java
public class Dog extends Animal {
public void sleep() {
System.out.println(this.name+" zzz");
}
}
HouseDog.java
public class HouseDog extends Dog {
public void sleep() {
System.out.println(this.name+" zzz in house");
}
public void sleep(int hour) {
System.out.println(this.name+" zzz in house for " + hour + " hours");
}
public static void main(String[] args) {
HouseDog dog = new HouseDog();
System.out.println(dog.name);
}
}
name 객체 변수에 아무 설정하지 않았기 때문에 null이 출력된다.
HouseDog 클래스는 코딩하기에 따라 name 값을 설정 할 수도 있고 안할 수도 있다.
name 값 설정을 강제하려면 생성자(constructor)를 이용하면 된다
HouseDog.java
public class HouseDog extends Dog {
//constructor
public HouseDog(String name) {
this.setName(name);
}
public void sleep() {
System.out.println(this.name+" zzz in house");
}
public void sleep(int hour) {
System.out.println(this.name+" zzz in house for " + hour + " hours");
}
public static void main(String[] args) {
HouseDog dog = new HouseDog();
System.out.println(dog.name);
}
}
Constructor 규칙
- 클래스 명과 메소드명이 동일하게
- 리턴타입을 정의하지 않는다
HouseDog dog = new HouseDog("happy"); // 생성자 호출 시 문자열을 전달해야 한다.
//아래와 같이 하면 컴파일 오류가 밠갱한다.
HouseDog dog = new HouseDog();
생성자 오버로딩
public class HouseDog extends Dog {
public HouseDog(String name) {
this.setName(name);
}
public HouseDog(int type) {
if (type == 1) {
this.setName("yorkshire");
} else if (type == 2) {
this.setName("bulldog");
}
}
public void sleep() {
System.out.println(this.name+" zzz in house");
}
public void sleep(int hour) {
System.out.println(this.name+" zzz in house for " + hour + " hours");
}
public static void main(String[] args) {
HouseDog happy = new HouseDog("happy");
HouseDog yorkshire = new HouseDog(1);
System.out.println(happy.name);
System.out.println(yorkshire.name);
}
}
위 HouseDog 클래스는 두 개의 생성자가 구현되어 있다. 하나는 String 자료형을 입력으로 받는 생성자이고 다른 하나는 int 자료형을 입력으로 받는 생성자이다. 두 생성자의 차이는 입력 항목이다. 이렇게 입력 항목이 다른 생성자를 여러 개 만들 수 있는데 이런 것을 생성자 오버로딩(Overloading) 이라고 말한다
이제 HouseDog 객체는 다음과 같이 두 가지 방법으로 생성이 가능하다.
HouseDog happy = new HouseDog("happy");
HouseDog yorkshire = new HouseDog(1);