OPEN between Secret

상속과 생성자 본문

java/정의

상속과 생성자

해가꿈꾸는달 2012. 5. 28. 11:19
반응형

상속 관계에 있는 서브 클래스와 슈퍼 클래스는 각자 생성자를 갖고 있는데
서브 클래스에서 인스턴스가 생성됬을시에 어떤 생성사들이 실행되는지 알아보는것

컴파일러는 서브 클래스의 생성자를 기준으로 슈퍼클래스의 적합한 생성자를 찾음

서브 클래스                                슈퍼 클래스

1                기본생성자         -------->           기본생성자

2                기본생성자         -------->     매개변수를 가진 생성자

3        매개변수를 가진 생성자  ------->           기본생성자

4        매개변수를 가진 생성자  ------->      매개변수를 가진 생성자

 

 

!!! super()를 이용하면 명시적으로 슈퍼 클래스의 생성자를 호출할수가 있다. 
         >>명시적으로 선택하지 않을시 컴파일러는 자동으로 기본생성자를 호출하기 때문 <<

ex)
--------------------------------------------------------------------------------------

class A {

public A() {

}

public A(int x) {

}

}

class B extends A {

 public B() {

}

public B(int x) {
     super(x);

}

}

public class ConstructorEX4 {

     public static void main(String [] args) {
                 B b;
                b = new B(5);

}

}
------------------------------------------------------------------------------------

란 예제가 있을시 (예제 < 명품 java Programming > )
b = new B(5) 에 의해서 class B 의 두개의 생성자중 B(int x)가 호출되었고
 B(int x)에 있는 super(x)에 의해서 슈퍼클래스 class A 의 두개의 생성자중 A(int x)를 호출하게 된다.

 

상속과 생성자관계 에서 주의할것
     1. 클래스에 아무 생성자도 정의되지 않은 경우에만 기본 생성자가 컴파일러에 의해 강제로 삽입됨
     2. 서브 클래스의 기본 생성자가 호출되면 자동으로 슈퍼 클래스의 기본 생성자를 호출함
     3. 서브 클래스의 매개 변수를 가진 생성자가 호출될때 특별한 지시가 없으면 자동으로 슈퍼 클래스의
        기본 생성자가 호출됨
     4. super() 은 this() 처럼 반드시 생성자 코드의 첫 라인에 와야 한다.

반응형

'java > 정의' 카테고리의 다른 글

오버로딩(overloading) 과 오버라이딩 (overriding)  (0) 2012.05.30
메소드 오버라이딩이란  (0) 2012.05.28
f inal 키워드란  (0) 2012.05.26
접근 지정자  (0) 2012.05.22
생성자와 this() 를 이용한 예  (0) 2012.05.19