2014-11-21 7 views
1

차이점은 무엇입니까?String to Object 타입 변환 - 차이

public class Test { 

    public static void main(String args[]) { 
     String toBeCast = "cast this string"; 
     A a = toBeCast; // error - Type mismatch: cannot convert from String to A 
     Object object = toBeCast; 
    } 
} 


public class A { 

} 

우리는 모든 객체가 A a = toBeCast;이 허용되지 않는 이유 Object class를 확장 말할 때, 그러나이 Object object = toBeCast; 잘 작동합니다. String 때문에

+0

다른 방법으로'String' 개체를 'A'로 캐스팅 할 수 있다고 생각합니까? 귀하의 코드에서 어디에서 A가 String의 수퍼 클래스인지 확인하므로 컴파일러가 A가 수행 할 수있는 모든 작업이 문자열로 처리된다는 것을 알고 있습니까? –

+0

@ Mike'Pomax'Kamermans 실제로 나는 여기에'Object class'를 생각하고 있습니다. 'A도 객체 다 '. –

+2

아니요, A는 String이 Object의 하위 클래스 인 것처럼 Object의 * ​​하위 클래스 *입니다. –

답변

3

기하학 클래스의 오래된 말 - "모든 사각형은 사각형이지만 모든 사각형이 사각형이 아닙니다"라는 것을 기억하십시오. 일반화 : "모든 정사각형/평행 사변형/마름모는 다각형이지만 모든 다각형이 정사각형/평행 사변형/마름모는 아닙니다."

다음은 무슨 일을하는지입니다 :

String toBeCast = "cast this string" //this rhombus is a rhombus: cool! 
A a = toBeCast; //this parallelogram is that rhombus : WTF? that doesn't make sense! 
Object object = toBeCast; //this polygon is that rhombus: cool! 
+2

LOL ... 코멘트에서 WTF를 사랑했습니다! – hfontanez

0

는이 Object A에 캐스팅하는 오류를주는 이유가 같은 클래스 계층 구조 모습입니다 A

+0

@drewmoore 나는이 질문이 downvotes를 얻어야한다고 생각하지 않는다.이 의심은 마음 속에 있을지 모른다. 많은..??. 나는 누가 그것을했는지 모른다. –

1
OBJECT 
/ \ 
    A String 

의 하위 클래스가 아닙니다.

1

변수 toBeCast 문자열 구조체의 인스턴스입니다.

String toBeCast = "cast this string"; 
Object obj = toBeCast; 

당신이 개체의 모든 인스턴스를 말하는 것처럼 (문자열을 포함) 때문입니다 시스템에서 상속 : 변수 a는 다음과 같은 컴파일 클래스 A.

그 수의 인스턴스입니다. 개체 그러나 다음은 컴파일되지 않습니다 :

A a = toBeCast; 

A (A 형)을하는 System.Object와 toBeCast (String 형) Object에서 상속에서 상속하지만, A 형은 String 형에서 상속하지 않습니다.

그래서 컴파일러에서 "형식이 일치하지 않습니다 : 문자열을 A로 변환 할 수 없습니다"를 반환합니다.

0

대상 창과 대상 나사를 봅니다. 둘 다 객체이지만 객체로 더 있습니다. 창이나 나사가 무엇인지 알기 위해 두 가지를 모두 설명하는 사양이 더 있습니다. 자바 언어를 코딩하는 객체에서도 마찬가지입니다. 완전히 다른 환경에서 클래스를 형 변환하는 것은 의미가 없습니다.

문자열도 final이고 변경할 수없는 개체입니다. Why is String final in Java?