現在認識到這一點至關重要,我似乎無法在任何地方找到信息,並且使用括號對其進行谷歌搜索是不可能的。這是什麼意思:((扳手)扳手).printInfo();
有代碼和一個扳手類printInfo方法,但用什麼「((類)對象)。方法();」
現在認識到這一點至關重要,我似乎無法在任何地方找到信息,並且使用括號對其進行谷歌搜索是不可能的。這是什麼意思:((扳手)扳手).printInfo();
有代碼和一個扳手類printInfo方法,但用什麼「((類)對象)。方法();」
要擴大馬切伊的答案...在Java中,一套方法和字段可以訪問取決於類型變量聲明爲 –不是對象的類型,它實際上是參考在任何給定的時間點(可能是該聲明類型的子類)。爲了訪問子類的成員,你需要告訴Java你想要獲取其成員的子類。你這樣做的方式是通過演員:(Class)object
。
這叫做「downcast」,意思是說你要從超類型轉到子類型。如果該對象實際上不是正確的類型,則向下傾倒將拋出ClassCastException
。
所以在上面Maciej的例子中,a
是一個聲明爲A
類型的引用。它的當前值是B
類型的對象,但要獲得B
的成員,您需要從A
類型的引用向下轉換爲類型B
的引用。
關於額外的括號:由於運算符的優先級,您不能僅僅執行(Class)object.foo()
– Java會將其解釋爲(Class)(object.foo())
。因此,您通常會添加圓括號以確保演員在之前發生,試圖撥打foo()
。
其所謂的鑄造
看看這個
public class A {
//statements
}
public class B extends A {
public void foo() { }
}
A a=new B();
//To execute **foo()** method.
((B)a).foo();
這是一個班級演員。閱讀[Java教程部分](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)以獲取更多信息。 –