2013-06-30 93 views
0

在以下情況下是否可以從ClassB訪問變量/方法?從實現接口的類訪問變量

凡ClassB的實現了InterfaceA

InterfaceA object = new ClassB(); 

object.variable_from_classB 

?我怎樣才能訪問的方法和從B類varables?

回答

0

一般來說,這是不可能的。對於使用靜態類型的Java等語言,您將收到編譯錯誤。將object投射回ClassB,例如

((ClassB) object).variable_from_classB 

將適用於您的情況。如果使用沒有靜態類型信息的語言,編譯器通常沒有機會確定變量是否可以訪問,甚至不存在於對象中。這將在運行時決定。

在允許強制轉換的靜態類型語言中,運行時環境通常會檢查強制轉換並在失敗時拋出錯誤。因此,如果object不是ClassB類型,則編譯器不會在上面的行上報告錯誤。但是,由於對象的具體類型不能轉換爲ClassB,因此在運行時會強制轉換失敗。

雖然上述人員本身是有效的,但這是不好的做法。至少,你應該先檢查演員是否成功,例如,使用instanceof或您的語言提供的任何操作符。如果您需要訪問ClassB的字段/方法,那麼使用ClassB類型的變量/參數而不是InterfaceA會更好。

參考文獻:

+0

喜@nif感謝您的回答。當你說「使用ClassB類型的變量/參數而不是InterfaceA時,如果你需要訪問ClassB的字段/方法」,你的意思是我應該創建另一個實例像ClassB varObj = new ClassB();然後通過varObj訪問我的變量? – Zippy

+0

我的意思是,如果你需要'ClassB'的東西,不要首先聲明你的變量是'InterfaceA'。僅僅因爲'ClassB'實現'InterfaceA'並不意味着你必須使用它。 – nif

+0

啊 - 明白了,謝謝:-) – Zippy