자바 에서 대상 을 만 들 때 초기 화 순서(2)

더 읽 기
   만약 집행 순서 에 대해 잘 이해 하지 못 하 는 아동 화 라면,나의 첫 번 째 글 을 먼저 보 는 것 을 건의 합 니 다.
   http://len-len.iteye.com/blog/1412463
   이전'자바 에서 대상 을 만 들 때 초기 화 순서'에 서 는 계승,다 중 등 상황 에서 대상 의 초기 화 순 서 를 대체적으로 소개 했다.이 절 은 특수 한 상황,특히 구조 기와 결합 하여 구조 기 에서 일부 방법 을 호출 할 때 나타 나 는 현상 을 말한다.우 리 는 먼저 예 를 보 자.
    A 류--부계
package extend;
public class A {
	public A(){
		draw();
	}
	public void  draw(){
		System.out.println("      draw  ");
	}
}

    B 류--하위 클래스
package extend;
public class B extends A{
	public int i = 1;
	public B(int i){
		this.i=i;
	}
	public void draw(){
		System.out.println("        ");
		System.out.println("i   :"+i);
	}
	public static void main(String[] args) {
		B b =  new B(5);
	}
}

    결과:
i   :0
        

      어 때!결 과 는 좀 실 망 스 럽 고 의 심 스 럽 죠?첫 번 째 는 왜 B 의 draw 방법 을 호출 했 는 지,두 번 째 는 왜 i=0 을 호출 했 는 지 의 심 스 럽 습 니 다.나 는 이 때 를 보고 오랫동안 혼 란 스 러 웠 지만,나중에 생각해 보 니 또 합리적이다 고 느 꼈 다.
      이 유 는?아니면 초기 화 순서 부터 말하자면 하위 클래스 대상 의 생 성 을 알 고 있 습 니 다.반드시 부모 클래스 의 구조 기 를 호출 할 것 입 니 다.이것 은 일반 구조 기 에서 다른 방법 을 호출 하지 않 았 을 때 부모 클래스 구조 기 가 다른 방법 을 호출 했다 면즉'바 인 딩'(바 인 딩 에 익숙 하지 않 거나 잘 모 르 면 나의 또 다른 글 인'final 해설'을 볼 수 있다)이 다른 방법 을 찾 았 을 때 어떤 문제 가 생 겼 는 지 결 과 를 보고 하위 클래스 를 호출 하 는 방법 을 발견 했다.왜 이러 지??
      문제 의 근원 은 바 인 딩 입 니 다.도대체 바 인 딩 하 는 방법 은 A 에서 draw 인지 B 에서 draw 인지 입 니 다.이것 은 만 든 대상 에 의 해 결정 되 는 것 입 니 다.즉,당신 이 만 든 것 이 B 대상 이 라면 B 대상 에 의 해 결정 되 는 것 입 니 다.그러나 어떤 사람 은 당신 의 이 예 A 에서 draw 방법 이 덮 여 있 고 B 대상 에 의 해 결정 된다 고 말 할 수 있 습 니 다.그러나 A 에서 다른 방법 이 있 고 B 가 덮 이지 않 았 다 면.그러면 A 중의 방법 을 반드시 호출 할 것 입 니 다.어떻게 B 가 결정 했다 고 할 수 있 습 니까?이런 말 도 맞 는데 내 말 도 맞 아.왜?B 가 A 를 물 려 받 았 기 때문에 B 가 A 의 모든 물 려 받 을 수 있 는 방법 을 물 려 받 았 기 때문에 이 방법 도 B 의 것 으로 볼 수 있다.
      첫 번 째 의혹 이 해결 되 었 습 니 다.두 번 째 는 요?왜 i 는 0 이 고 B 에서 초기 화 되 지 않 았 습 니까?속성 이 구조 기 전에 초기 화 되 었 다 고 하지 않 았 습 니까?이것 은 다른 문 제 를 초기 화 하 는 것 을 말 해 야 합 니 다.우 리 는 속성 이 그 에 게 값 을 부여 하지 않 아 도 틀 리 지 않 을 것 이라는 것 을 알 고 있 습 니 다.0,null 이 아니면 false 입 니 다.네,그렇습니다.이러한 초기 화 과정 은 모든 사물 전에 완 성 된 것 입 니 다.즉,아무 일 도 일어나 기 전에 이런 속성 들 은 기본 값 을 부여 합 니 다.다음 단 계 는 상기 글 에서 말 한 바 와 같이 기본 적 인 구조 기 를 호출 했다.기본 적 인 구조 기 중의 draw 방법 은 B 중의 방법 이 고 B 는 이때 i 가 0 이기 때문에 결 과 는 그렇다.
     여기까지 말 하면 모두 가 이해 할 것 이 라 고 믿는다. 몇 마디 를 정리 하면 첫 번 째 문장 은 다 중 상황 에서 만 든 대상 이 호출 방법 을 결정 한다.두 번 째 문장:대상 에 게 기본 값 을 부여 하면 다른 어떤 상황 이 발생 하기 전에.세 번 째:별일 없 이 구조 기 에 다른 방법 을 연결 하지 마 세 요.

좋은 웹페이지 즐겨찾기