2013-08-28 50 views
0

現在認識到這一點至關重要,我似乎無法在任何地方找到信息,並且使用括號對其進行谷歌搜索是不可能的。這是什麼意思:((扳手)扳手).printInfo();

有代碼和一個扳手類printInfo方法,但用什麼「((類)對象)。方法();」

+1

這是一個班級演員。閱讀[Java教程部分](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)以獲取更多信息。 –

回答

3

要擴大馬切伊的答案...在Java中,一套方法和字段可以訪問取決於類型變量聲明爲 –不是對象的類型,它實際上是參考在任何給定的時間點(可能是該聲明類型的子類)。爲了訪問子類的成員,你需要告訴Java你想要獲取其成員的子類。你這樣做的方式是通過演員:(Class)object

這叫做「downcast」,意思是說你要從超類型轉到子類型。如果該對象實際上不是正確的類型,則向下傾倒將拋出ClassCastException

所以在上面Maciej的例子中,a是一個聲明爲A類型的引用。它的當前值是B類型的對象,但要獲得B的成員,您需要從A類型的引用向下轉換爲類型B的引用。

關於額外的括號:由於運算符的優先級,您不能僅僅執行(Class)object.foo() – Java會將其解釋爲(Class)(object.foo())。因此,您通常會添加圓括號以確保演員在之前發生,試圖撥打foo()

1

其所謂的鑄造
看看這個

public class A { 
    //statements 
} 

public class B extends A { 
    public void foo() { } 
} 

A a=new B(); 

//To execute **foo()** method. 

((B)a).foo();