2011-04-09 7 views
0

는 문Java에서 다형성을 설명 하시겠습니까?

A m = new B(); 

을 감안할 때 그 클래스 B를 아는 것은 클래스 A의 서브 클래스 A는, 는 문이 평가 될 때 상황에 대해 설명 Object의 서브 클래스입니다.

미리 감사드립니다.

+11

컴파일러는 질문에'숙제'태그를 추가하지 않았다는 불평을합니다. – Mehrdad

+0

이 숙제입니까, 아니면 단지 궁금한 것이 있습니까? –

+2

사실은 과거의 시험지이며 어떻게 해결해야할지 모르겠습니다. – EOS

답변

0
  • 변수 타입 B의 목적은
  • 가변 m
  • 이 생성 된 객체에 대한 참조를 할당 구성된다 A
  • 형, 생성 m라고
사용자가 참조 할 수

m처럼 캐스트가없는 A 유형입니다. 즉, A에 정의 된 메서드를 호출 할 수 있습니다. 오버라이드 된 경우 B의 메서드 버전이 대신 호출됩니다. 그러나 캐스트를 사용하지 않는 한 B에 해당하는 메서드는 호출 할 수 없습니다.

1

가장 간단한 대답은 B가 A의 하위 클래스이기 때문에이 평가가 정상적으로 발생할 수 있다는 것입니다.

파생 클래스가 기본 클래스의 인스턴스이기 때문에 기본 클래스에 대한 포인터가 파생 클래스를 가리킬 수 있습니다.

이의 좀 더 예제를 확장하자 : 우리는 m에 객체를 할당 할 수 있기 때문에

A m; 
B n = new B(); 
m = n; // Valid statement 

미터 = n은 유효한 문입니다. 컴파일러는 B가 A에서 파생된다는 것을 알기 때문에 실제로 A 객체입니다. 관련없는 유형 인 경우 컴파일러에서 소리를 지르려고합니다.

+0

예, 그렇습니다. Java가 이해하고 B 타입을 A 타입으로 변환하는 메커니즘을 원한다고 생각합니다. –

+0

좋아요, 저는 서브 클래스 타입의 객체가 수퍼 클래스에서 제공되는 타입을 사용하여 생성 될 수 있다는 것을 알고 있습니다. (세부 사항 등) – EOS

+0

@ EOS :별로. 내 대답에 조금 더 추가되었지만,이 진술에는 거의 영향이 없습니다. –

0

RTTI이 단어입니다. 런타임 유형 식별.
Bruce Eckel의 "Thinking in Java"를 추천합니다.

관련 문제