ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] 생성자(Constructor)
    java 2023. 1. 17. 11:49
    생성자는 필드(객체변수)에 값이 설정되지 않아도 객체가 생성되게 만들 수 있다.

     

    생성자의 규칙

    1. 클래스명과 메소드명이 동일하다.

    2. 리턴타입을 정의하지않는다.(void도 사용하지않는다.)

    3. 생성자는 객체가 생성될떄 호출된다.(new키워드가 사용될때 호출)

    class Animal{
        String name;
    
        void setName(String name) {
            this.name = name;
        }
    }
    class Dog extends Animal{
        void sleep(){
            System.out.println(this.name + "zzz");
    
        }
    }
    class HouseDog extends Dog{ 
        HouseDog(String name){ //생성자: 클래스명과 이름이 동일 리턴타입x
            this.setName(name);
        }
        void sleep() {
            System.out.println(this.name + "zzz in house");}
        void sleep(int hour){
                System.out.println(this.name + "zzz in house" + hour + "hours");
            }
        }
    public class Sample {
        public static void main(String[] args) {
            HouseDog dog = new HouseDog("happy");
    
            System.out.println(dog.name);
    
        }
    }

    default 생성자

    생성자의 입력항목이 없고 생성자 내부에 아무내용이 없는 생성자를 디폴트 생성자라고 부른다.

    만약 클래스에 생성자가 하나도 없다면 컴파일러는 자동으로 디폴트 생성자를 추가한다.

    사용자가 생성한 생성자가 하나라도 구현되어 있다면 컴파일러는 디폴트 생성자를 추가하지않는다.

    class Dog extends Animal{
        Dog(){} //디폴트생성자
        
        void sleep(){
            System.out.println(this.name + "zzz");
    
        }
    }

    생성자 오버로딩

    메소드 오버로딩과 마찬가지로 하나의 클래스에 입력변수가 다른, 동일한 이름의, 생성자를 여러개 만든다.

    class HouseDog extends Dog{
    //생성자 오버로딩
        HouseDog(String name){ //생성자 입력변수 String타입
            this.setName(name);
        }
        HouseDog(int type){//생성자 입력변수 int타입
            if (type == 1) {
                this.setName("youkshire");
            } 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" + hour + "hours");
            }
        }

     

     

    'java' 카테고리의 다른 글

    [java] 인터페이스의 다형성과 다중상속  (0) 2023.01.17
    [java] 인터페이스  (0) 2023.01.17
    [java] 상속  (0) 2023.01.16
    [java] call by value vs call by reference  (0) 2023.01.16
    [java] 메소드  (0) 2023.01.16

    댓글

lee-ding