A m = new B();
을 감안할 때 그 클래스 B를 아는 것은 클래스 A의 서브 클래스 A는, 는 문이 평가 될 때 상황에 대해 설명 Object의 서브 클래스입니다.
미리 감사드립니다.
A m = new B();
을 감안할 때 그 클래스 B를 아는 것은 클래스 A의 서브 클래스 A는, 는 문이 평가 될 때 상황에 대해 설명 Object의 서브 클래스입니다.
미리 감사드립니다.
B
의 목적은 m
A
m
라고m
처럼 캐스트가없는 A
유형입니다. 즉, A
에 정의 된 메서드를 호출 할 수 있습니다. 오버라이드 된 경우 B
의 메서드 버전이 대신 호출됩니다. 그러나 캐스트를 사용하지 않는 한 B
에 해당하는 메서드는 호출 할 수 없습니다.
가장 간단한 대답은 B가 A의 하위 클래스이기 때문에이 평가가 정상적으로 발생할 수 있다는 것입니다.
파생 클래스가 기본 클래스의 인스턴스이기 때문에 기본 클래스에 대한 포인터가 파생 클래스를 가리킬 수 있습니다.
이의 좀 더 예제를 확장하자 : 우리는 m에 객체를 할당 할 수 있기 때문에A m;
B n = new B();
m = n; // Valid statement
미터 = n은 유효한 문입니다. 컴파일러는 B가 A에서 파생된다는 것을 알기 때문에 실제로 A 객체입니다. 관련없는 유형 인 경우 컴파일러에서 소리를 지르려고합니다.
예, 그렇습니다. Java가 이해하고 B 타입을 A 타입으로 변환하는 메커니즘을 원한다고 생각합니다. –
좋아요, 저는 서브 클래스 타입의 객체가 수퍼 클래스에서 제공되는 타입을 사용하여 생성 될 수 있다는 것을 알고 있습니다. (세부 사항 등) – EOS
@ EOS :별로. 내 대답에 조금 더 추가되었지만,이 진술에는 거의 영향이 없습니다. –
RTTI
이 단어입니다. 런타임 유형 식별.
Bruce Eckel의 "Thinking in Java"를 추천합니다.
컴파일러는 질문에'숙제'태그를 추가하지 않았다는 불평을합니다. – Mehrdad
이 숙제입니까, 아니면 단지 궁금한 것이 있습니까? –
사실은 과거의 시험지이며 어떻게 해결해야할지 모르겠습니다. – EOS