我沒讓你在你的第二個問題是什麼意思,所以我會後回答你的第一個和第三個問題,希望您將編輯您的問題,並改寫你的第二個問題。
1)不,這是不可能的。否則,以下是可能的:
SomeInterface object1 = new Class1ImplementingInterface();
Class2ImplementingInterface object2 = object1; // Won't compile
這上面一段代碼不編譯。但是,如果將其更改爲:
SomeInterface object1 = new Class1ImplementingInterface();
Class2ImplementingInterface object2 = (Class2ImplementingInterface) object1; // Compiles, but will crash at runtime
這將編譯,但它會在運行時拋出一個ClassCastException
。但是,可以將特定類的對象分配給父類/接口的對象,而無需強制轉換。例如:
Class2ImplementingInterface object2 = new Class2ImplementingInterface();
SomeInterface object1 = object2; // OK
2)您的問題沒有指定參數的類型是否爲接口,這是有區別的。假設你具體詢問了接口,那麼是的,帶參數的方法將接受參數類型的任何實例或任何子類型。例如。
public void someMethod (SomeInterface parameter) {
// Implementation
}
上面的代碼將接受實施SomeInterface
任何類的對象。但是,如果參數的類型是一個類,那麼只有相同類的對象或擴展該基類的任何類纔會被接受。
3)沒有,爲會員,構造函數和方法的默認訪問package private
,這意味着只有在同一個包中的類將有機會獲得的。您必須爲您想要公開的成員指定public
訪問修飾符。
來源
2013-09-23 23:17:13
Laf
我可以告訴你最後一個問題的答案:不,公開課的方法不一定是公開的。你能更清楚另外兩個嗎? – gparyani
你有什麼嘗試?編寫一些Java代碼並運行編譯器來回答這些問題會更容易。此外,它[鼓勵](http://meta.stackexchange.com/questions/39223/one-post-with-multiple-questions-or-multiple-posts)每個帖子詢問一個問題。這有助於其他具有相同問題的人通過搜索引擎更容易地找到他們的答案。 – StriplingWarrior
請記住,您正在投射**參考**,而不是對象。更改引用的類型不會觸及它指向的對象。 –