2014-04-03 2 views
0

그래서 내 컴파일러 클래스에서 우리는파견 및 상속 (동적 유형의 대 정적)

p : Point; 
p <- new ColorPoint; 

여기 p는 포인트로 선언되고있는 코드를 보았다하지만 ColorPoint 객체를 할당하고, ColorPoint는이다 Point의 서브 클래스

강사는 p에는 정적 유형 Point가 있지만 동적 유형 ColorPoint가 있다고합니다. 그리고 그는 컴파일러가 p가 컴파일 타임에 ColorPoint라는 것을 모르기 때문에 런타임에 그 점을 알아낼 뿐이라고 말했습니다. 왜 그런가요? 컴파일러가 p가 ColorPoint 객체를 할당받는 것을 볼 수 없습니까?

답변

0

예, 당신이 종종

p : Point; 
p <- new ColorPoint; 
// some statements that operate on p 
p <- new BlackAndWhitePoint; 
// some more statements that operate on p 

이 있다면이 그것을 할 수있는 상황,하지만에, 컴파일러는 선언 된 유형에 따라 이동해야하므로 변수가 사용되는 전체 맥락을 추론 할 수 없습니다.