본문 바로가기
풀스택/Java다시 복습 처음부터

java 복습 3-4(객체지향 프로그래밍) - 생성자, 오버로딩

by woohyun22 2019. 6. 6.
1
2
3
4
5
6
7
public class Animal {
    String name;
 
    public void setName(String name) {
        this.name = name;
    }
}
cs


1
2
3
4
5
public class Dog extends Animal {
    public void sleep() {
        System.out.println(this.name+" zzz");
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();
        houseDog.sleep(3);
    }
}
cs


1
2
3
4
public static void main(String[] args) {
        HouseDog dog = new HouseDog();
        System.out.println(dog.name);
    }
cs


name 객체에는 아무 값도 없기 떄문에 null값이 나온다. 

name이라는 객체 변수에 값을 무조건 설정해야만 객체가 생성되도록 하려면 생성자를 이용하면된다.


1
2
3
public HouseDog(String name) {
        this.setName(name);
    } 
cs


생성자의 규칙에는 

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

2. 리턴타입을 정의하지 않는다.


생성자를 만들어 준다면 입력값을 적어준 것 처럼


1
HouseDog dog = new HouseDog("happy");   // 생성자 호출 시 문자열을 전달해야 한다.
cs


와 같이 입력값을 정해줘야 객체를 생성할 수 있다.

생성자를 사용했을 때 얻게 되는 것은 객체 생성을 제어할 수 있다는 것이다.


원래 클래스를 생성하면 자동적으로 default 생성자가 생성되어 있는데, 

집접 생성자를 만들어 준다면  jvm에서 만들어 주지않기 때문에 

직접 default 생성자를 만들어 주어야한다.


생성자를 사용한 예시로는 오버로딩이 있는데


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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);
    }
}
cs


오버로딩은 입력 항목이 다른 생성자를 여러 개 만들 수 있는는것을 말한다.

-메소드 덮어쓰기-


부모 메소드에 있는 것을 자식에 메소드를 새로 생성해주어서 우선적으로 쓰는것

생성자 오버로딩 다른 입력값을 받는 생성자를 만들어서 입력값에 따라 다른 메소드 실행


728x90

댓글