0
在以下情況下是否可以從ClassB訪問變量/方法?從實現接口的類訪問變量
凡ClassB的實現了InterfaceA
InterfaceA object = new ClassB();
object.variable_from_classB
?我怎樣才能訪問的方法和從B類varables?
在以下情況下是否可以從ClassB訪問變量/方法?從實現接口的類訪問變量
凡ClassB的實現了InterfaceA
InterfaceA object = new ClassB();
object.variable_from_classB
?我怎樣才能訪問的方法和從B類varables?
一般來說,這是不可能的。對於使用靜態類型的Java等語言,您將收到編譯錯誤。將object
投射回ClassB
,例如
((ClassB) object).variable_from_classB
將適用於您的情況。如果使用沒有靜態類型信息的語言,編譯器通常沒有機會確定變量是否可以訪問,甚至不存在於對象中。這將在運行時決定。
在允許強制轉換的靜態類型語言中,運行時環境通常會檢查強制轉換並在失敗時拋出錯誤。因此,如果object
不是ClassB
類型,則編譯器不會在上面的行上報告錯誤。但是,由於對象的具體類型不能轉換爲ClassB
,因此在運行時會強制轉換失敗。
雖然上述人員本身是有效的,但這是不好的做法。至少,你應該先檢查演員是否成功,例如,使用instanceof
或您的語言提供的任何操作符。如果您需要訪問ClassB
的字段/方法,那麼使用ClassB
類型的變量/參數而不是InterfaceA
會更好。
參考文獻:
喜@nif感謝您的回答。當你說「使用ClassB類型的變量/參數而不是InterfaceA時,如果你需要訪問ClassB的字段/方法」,你的意思是我應該創建另一個實例像ClassB varObj = new ClassB();然後通過varObj訪問我的變量? – Zippy
我的意思是,如果你需要'ClassB'的東西,不要首先聲明你的變量是'InterfaceA'。僅僅因爲'ClassB'實現'InterfaceA'並不意味着你必須使用它。 – nif
啊 - 明白了,謝謝:-) – Zippy