2014-11-21 67 views
1

有什麼區別?字符串到對象類型轉換 - 差異

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 { 

} 

當我們說每一個對象擴展Object class,爲什麼不允許A a = toBeCast;,但這Object object = toBeCast;工作正常。

+0

其他方式:你爲什麼認爲'String'對象應該可以轉換爲'A'?你在代碼中的哪個位置確保A是String的超類,以便編譯器知道A應該能夠做的所有事情都被String覆蓋了? – 2014-11-21 01:59:24

+0

@ Mike'Pomax'Kamermans其實我只是在想'Object class'。 'A也是對象'等等。 – 2014-11-21 02:00:22

+2

不,A是Object的*子類*,就像String是Object的子類一樣。 – 2014-11-21 02:00:57

回答

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 2014-11-21 02:21:14

0

因爲String不是A

+0

@drewmoore我不認爲這個問題應該得到降低,這個疑問可能在腦海中許多的..??。我不知道是誰做的。 – 2014-11-21 02:12:09

1
OBJECT 
/ \ 
    A String 

一個子類,這是你的類層次的樣子,這就是爲什麼鑄造Object A給出了一個錯誤。

1

變量toBeCast是字符串結構的實例。 變量一個是類A.

其可能的實例,以編譯下面:

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

這是因爲,如你所說的對象的每個實例(包括字符串)從系統繼承。對象,但以下不會編譯:

A a = toBeCast; 

雖然(A型)從System.Object和toBeCast(類型字符串)從對象繼承繼承,A型不從類型字符串繼承。

所以編譯器返回:「類型不匹配:不能從字符串轉換爲A」。

0

在對象窗口和對象螺釘上進行查看。它們都是對象,但它們更像是一個對象。有更多的規格來描述兩個,所以你知道什麼是窗戶或螺絲。編碼語言Java中的對象也是如此。 從完全不同的環境中投射類是沒有意義的。

字符串也是最終的和不可變的對象。請看看 Why is String final in Java?