2010-11-23 2 views
2

자바를 배우며 개체 유형에 대한 질문이 있습니다.질문 개체 유형 정보

class A { } 

class B extends A { } 

class C {A myObject = new B();} 

인 myObject의 유형을 설명하는 허용 방법은 무엇입니까 :

는 예를 들어 다음을 가지고?

유형 A, 유형 B 또는 유형 A 및 B라고 하시겠습니까?

감사합니다.

+0

타입 B의 인 객체를 참조? 당신은 어떤 결과물을 얻습니까? –

답변

6

myObjectA 유형의 참조입니다 (변수는 A 유형으로 선언되었습니다).

myObject에 의해 참조되는 개체 자체는 B입니다. 인스턴스의 유형은 B입니다.

이것은 상황과 초점의 문제입니다. 다른 곳에서 myObject을 사용하는 경우 알 수없는 곳에서 B 클래스의 인스턴스이며 A 유형이어야합니다.

+0

개체가 "내부에 저장되지"않고 참조로 참조됩니다. –

+0

수정하십시오. 수정 됨. – Kissaki

1

타입이 A 타입입니다. 타입은 수행 할 수있는 작업을 의미하지만 B의 인스턴스이므로 모든 작업은 B 방식으로 수행됩니다.

1

myObject 런타임시 선언 컴파일 시간 형 A.의 필드이고, 그

이러한 구별 선언 사이 유형 B.의 객체를 참조한다 (또는 컴파일 시간) 변수 및 런타임 유형 객체 유형은 Java와 같이 정적으로 유형이 지정된 언어에서 다형성이 작동하는 방식을 이해하는 데 중요합니다. 오버라이드 된 메소드의 호출과 같은 일부 사항은 런타임 유형에 의해 결정되며, othersy (오버로드 된 메소드 또는 정적 메소드의 호출과 같은)는 컴파일 타임 유형에 의해 결정됩니다.

일반적으로 선언 된 유형은 객체로 수행 할 수있는 작업을 결정하고 런타임 유형은 동작 방식을 결정합니다.

0

상속은 "is a"관계 - 서브 클래스 의 인스턴스는 수퍼 클래스의 인스턴스입니다. 귀하의 예에서 B는 A를 확장하므로 B의 인스턴스도 A의 인스턴스입니다. 따라서 캐스팅하지 않고 A 유형의 변수에 새 B를 지정할 수 있습니다.

변수 myObject

은 A 형이다,하지만 정말 당신이 시도

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 이것을 지금 이해하고 있다고 생각한다. – codealive