생성자
메소드명이 클래스이름과 동일하고 리턴 자료형이 없는 메소드를 생성자라고 한다.
생성자의 규칙
- 클래스명과 메소드명이 동일한다.
- 리턴타입을 정의하지 않는다.
HouseDog라는 클래스를 다음과 같이 수정하면
public class HouseDog extends Dog { 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("happy"); //new로 생성했으므로 반드시 괄호안에 값이 있어야 한다. System.out.println(dog.name); } }
happy가 출력된다.
생성자를 사용했을 때 얻게 되는 이득은 setName("happy")와 같은 필수적인 행동을 객체 생성시에 제어할 수 있게 된다는 점이다.
default 생성자
public class Dog extends Animal { public Dog() { } public void sleep() { System.out.println(this.name + " zzz"); } }
위와 같이 생성자의 입력항목이 없고 생성자 내부에 아무 내용이 없는 생성자를 default 생성자라고 부른다.
public HouseDog(String name) { this.setName(name); } public HouseDog(int type) { if (type == 1) { this.setName("yorkshire"); } else if (type == 2) { this.setName("bulldog"); } }
마찬가지로 하나의 클래스에 이름이 같은 여러 생성자를 만들 수 있다.
이제 다음 두가지 방법으로 객체를 생성할 수 있다.
HouseDog happy = new HouseDog("happy"); HouseDog yorkshire = new HouseDog(1);
happy yorkshire
댓글