개발/JAVA
생성자 오버로딩(Constructor Overloading)
코린이딱콩
2022. 8. 29. 16:03
✔️클래스 필드의 초기화는 다양한 방식으로 이루어질 수 있으며 이를 위해 다양한 형태의 생성자를 정의할 수 있습니다.
✔️생성자의 이름은 반드시 클래스의 이름과 동일해야 하기 때문에 다수의 생성자 정의는 생성자 오버로딩으로 정의합니다.
✔️생성자 오버로딩은 해당 클래스를 구성하는 생성자들의 매개변수 개수와 타입, 순서를 달리하여 정의합니다.
✔️객체의 인스턴스화 과정에서 생성자를 호출하며 이때 파라미터를 다르게 하여 필요한 생성자를 호출합니다.
예시1
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void sleep() {
System.out.println(this.name + "zzz");
}
}
class HouseDong extends Dog {
HouseDog(String name) {
this.setName(name);
}
HouseDog(int type) {
if(type == 1) {
this.setName("yorkshire");
}else if (type == 2) {
this.setName("bulldog");
}
}
void sleep() {
System.out.println(this.name + "zzz in house");
}
void sleep(int hour) {
System.out.println(this.name + "zzz in house for " + hour + "hours");
}
}
public class Sample {
public static void main(String[] args) {
HouseDog happy = new HouseDog("happy");
HouseDog yorkshire = new HouseDog(1);
System.out.println(happy.name); //happy 출력
System.out.println(yorkshire.name); //yorkshire 출력
}
}
예시2
public class Employee {
private String name;
private int age;
private String department;
public Employee() {
System.out.println("Employee() 생성자 호출");
}
public Employee(String name) {
System.out.println("Employee(String name) 생성자 호출");
}
public Employee(String name, int age) {
System.out.println("Employee(String name, int age) 생성자 호출");
}
public class Test {
public static void main ( String args[]) {
Employee employee1 = new Employee();
Employee employee2 = new Employee("김수현");
Employee employee3 = new Employee("홍길동", 20);
System.out.println(employee1);//Employee() 생성자 호출
System.out.println(employee2);//Employee(String name) 생성자 호출
System.out.println(employee3);//Employee(String name, int age) 생성자 호출