[자바 상속과 생성자(java inheritance and cinstructor)]
생성자는 상속되지 않지만 하위 클래스의 생성자에 의해 반드시 호출 된다.
하위 클래스 객체가 생성 될때 상속 받은 변수를 저장할 수 있는 메모리도 포함하여 객체에 할당한다.
하위 클래스의 생성자 몸체의 첫번째 문장은 다음중 한가지…
super(…) : 상위 클래스의 생성자를 명시적으로 호출
this(…) : 동일 클래스의 다른 생성자를 호출
기타 다른 문장이 오면 super() 문장이 컴파일러에 의해 자동 삽입된다.
메모리 할당 방법
상위 클래스의 메모리 영역을 합한 메모리 영역을 힙에 할당
생성자는 단지 할당된 메모리를 초기화하는 역할
생성자는 단지 할당된 메모리를 초기화하는 역할
super(...), this(...)
class B extends A
{
B(String name, int i)
{
super(name);
객체 생성 순서
메모리에 객체 생성 및 인스턴스 변수 디폴트 값으로 초기화
상위 클래스의 생성자부터 차례로 호출
this, super 고려
상위 클래스의 생성자부터 차례로 호출
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() 생성자 실행
A 생성자 실행
B 인스턴스변수 j 초기화
B() 생성자 실행
[개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[11/4]Spring3.X, MyBatis, Hibernate실무과정
[11/6]SQL초보에서실전전문가까지
[평일야간]
[10/29]C#,ASP.NET마스터
[11/5]iPhone 하이브리드 앱 개발 실무과정
[11/7]JAVA&WEB프레임워크실무과정
[11/8]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[11/2]C#,ASP.NET마스터
[11/2]Spring3.X, MyBatis, Hibernate실무과정
[11/2]JAVA&WEB프레임워크실무과정
[11/9]안드로이드개발자과정
[주간]
[11/4]Spring3.X, MyBatis, Hibernate실무과정
[11/6]SQL초보에서실전전문가까지
[평일야간]
[10/29]C#,ASP.NET마스터
[11/5]iPhone 하이브리드 앱 개발 실무과정
[11/7]JAVA&WEB프레임워크실무과정
[11/8]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[11/2]C#,ASP.NET마스터
[11/2]Spring3.X, MyBatis, Hibernate실무과정
[11/2]JAVA&WEB프레임워크실무과정
[11/9]안드로이드개발자과정
[기타 다른 강좌는 아래 카테고리 클릭하세요]
댓글 없음:
댓글 쓰기