자바

JAVA 자바 부모 생성자 호출

알통몬_ 2017. 3. 12. 19:33
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

자식 객체를 생성하면 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성됩니다.

Blog 객체만 생성되는 것으로 보이지만 내부적으로는 부모 객체인 Naver 객체가 먼저 생성되고

Blog 객체가 생성됩니다.

Naver Blog = new Naver();


모든 객체는 클래스의 생성자를 호출해야만 생성이 됩니다. 부모 객체도 예외는 아닙니다. 

부모 객체를 생성하기 위해서는 부모 생성자가 필요한데, 

부모 생성자는 자식 생성자 맨 첫 줄에서 호출됩니다.

 Blog의 생성자가 명시적으로 생성되지 않았다면 컴파일러는 아래와 같은 기본 생성자를 생성합니다.

public Blog() {
 super();

}

super() 는 부모의 기본 생성자를 호출

public Naver 클래스의 생서자를 호출하는 것입니다.


만약 명시적으로 자식 생성자를 선언하고 명시적으로 부모 생성자를 호출하고 싶다며 아래와 같이 하시면 됩니다.

자식클래스(매개변수선언,...) {

   super(매개값,...);

   ...

}

super(매개값,...)은 매개값의 타입과 일치하는 부모 생성자를 호출합니다. 

일치하는 부모 타입이 없다면 컴파일 오류가 발생합니다. 

super(매개값,...)가 생략되면 컴파일러에 의해 super()가 자동적으로  추가되기 때문에 부모의 기본 생성자가 존재해야합니다. 부모 클래스의 기본 생성자가 없고 매개 변수가 있는 생성자만 있다면 자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개값,...)를 명시적으로 호출해야 합니다. 그리고 super(매개값,...)는 반드시 자식 생서자 첫 줄에 위치해야 합니다.


예제)

부모 클래스

public class People {

public String name;

public String ssn;

public People(String name, String ssn) {

this.name = name;

this.ssn = ssn;

}

 

}


자식 클래스
public class Student extends People{
public int studentNo;
public Student(String name, String ssn, int studentNo) {
super(name, ssn);
this.studentNo = studentNo;
}
}
 
자식 객체 사용
public class StudentExample {
public static void main(String[] args) {
Student student = new Student("홍길동", "123456-1234567", 1);
System.out.println("name : " + student.name);
System.out.println("ssn : " + student.ssn);
System.out.println("studentNo : " + student.studentNo);
}
}


반응형