2013년 10월 27일 일요일

[자바 상속과 생성자(java inheritance and cinstructor)]

[자바 상속과 생성자(java inheritance and cinstructor)]
 
생성자는 상속되지 않지만 하위 클래스의 생성자에 의해 반드시 호출 된다.
 
하위 클래스 객체가 생성 될때 상속 받은 변수를 저장할 수 있는 메모리도 포함하여 객체에 할당한다.
 
하위 클래스의 생성자 몸체의 첫번째 문장은 다음중 한가지…

super(…) : 상위 클래스의 생성자를 명시적으로 호출
this(…)    : 동일 클래스의 다른 생성자를 호출
 
기타 다른 문장이 오면 super() 문장이 컴파일러에 의해 자동 삽입된다.

메모리 할당 방법
 
상위 클래스의 메모리 영역을 합한 메모리 영역을 힙에 할당
생성자는 단지 할당된 메모리를 초기화하는 역할
 
super(...), this(...)

class B extends A
{
    B(String name, int i)
    {
        super(name);
       
객체 생성 순서
 
메모리에 객체 생성 및 인스턴스 변수 디폴트 값으로 초기화
상위 클래스의 생성자부터 차례로 호출
this, super 고려

//아래 예제를 보고 실행하는 순서 잘 보세요~
class A{
 int i = out( "A 인스턴스변수 i 초기화" );
 
    static int out( String msg )   {
        System.out.println( msg );
        return 1;
    }
   
    //생성자 실행전에 인스턴스 변수가 먼저 초기화
    public A()    {
     out( "A 생성자  실행" );
    }
}
class B extends A {
    public int j = out( "B 인스턴스변수 j 초기화" );
   
  //생성자 실행전에 인스턴스 변수가 먼저 초기화
    //B의 생성자 실행전에 A 생성자 CALL
    public B()    {
     out( " B() 생성자 실행" );
    }
}
class ConTest{
    public static void main( String[] args )    {
        B obj = new B();
    }
}
 
[결과]
 
A 인스턴스변수 i 초기화
A 생성자  실행
B 인스턴스변수 j 초기화
 B() 생성자 실행

댓글 없음:

댓글 쓰기