자바 생성자에 대한 개념이 잡히지 않은 초보가 질문드립니다

조회수 684회

package test1;

public class test1 {

public static void main(String[] args) {    
    Animals dog = new Dog(3);       
    System.out.println(dog.age);

} }

================================================

package test1;

public class Animals {

int age=1;

}

================================================

package test1;

public class Dog extends Animals {

int age=2;

public Dog() {
}   

public Dog(int page) {
    age = page;
}   

}

생성자를 공부하다가 생성자의 정확한 역할이 궁금해서 질문드립니다.

위 코드에서 실행결과가 1이 나오는데 dog 인스턴스를 생성할 때 Dog() 생성자는 무슨 역할을 하는지, Animals 클래스 자료형은 무슨 역할을 하는지 개념을 명확하게 알고 싶습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • new 연산자를 이용하여 해당 클래스의 생성자를 호출합니다. 생성자를 호출함으로써 인스턴스를 생성합니다. 따라서 생성자는 객체를 생성할 때 젤 첨 호출되는 메서드입니다. 그렇기에 생성자에 매개변수를 설정하여 값을 전달하거나 속성의 초기화를 설정하는데 이용됩니다.

  • 저도 자바를 해본지가 오래돼서 정확하지는 않지만 기억을 더듬어서 답변드리자면..

    일단 위의 코드에서 Dog() 생성자는 아무 역할을 하지 않습니다

    왜냐면 메인 함수에서 실행한 생성자가 Dog(int page)이기 때문입니다

    기본 생성자는 클래스 생성자가 아무것도 없을 경우 argument로 아무것도 받지 않는 생성자를 기본으로 생성해 주는데, 그 자체로는 작성하신 코드와 동일하게 아무런 동작도 하지 않습니다.

    대신 위와 같이 명시적으로 생성해주고 그 내부에 특정한 동작을 정의해두신다면 기본 생성자가 호출될 때마다 그 동작을 수행하게 됩니다.

    Animals 클래스의 경우 Dog 클래스가 상속받은 부모 클래스입니다.

    Dog dog = new Dog(3); 
    

    와 같은 형태로 코드를 작성하셨다면 출력문에서 3이 출력되었겠지만, 이 객체를 Animals 객체로 타입형 변환(type casting) 하였기 때문에 Animals 클래스의 age값인 1이 출력된 것입니다.

    이 부분에 대해 궁금하시다면 자바의 상속과 타입형 변환에 대해 더 공부해 보시길 추천드립니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)