2013-09-23 45 views
0

我有3個問題,如果有人能解釋給我,我將不勝感激。對象屬於一個類可以分配給一個類型的變量是一個子類沒有鑄造?

首先,

一個對象可以屬於一類被分配到一個類型,它是沒有鑄造一個子類的變量?如果答案是肯定的,那麼在將對象分配給超類時需要進行轉換?還是我剛把他們翻過來?

其次,它是正確的,在一個接口與單個參數的方法可以接受作爲用於從許多不同的類,參數對象未繼承關係的參數值?我會對這個問題說是,因爲這個接口可以通過不同的類來擴展,但我不確定這是否正確。

最後,是自動定義的公共公共類中的方法呢?或者它是否被定義爲包?

+0

我可以告訴你最後一個問題的答案:不,公開課的方法不一定是公開的。你能更清楚另外兩個嗎? – gparyani

+0

你有什麼嘗試?編寫一些Java代碼並運行編譯器來回答這些問題會更容易。此外,它[鼓勵](http://meta.stackexchange.com/questions/39223/one-post-with-multiple-questions-or-multiple-posts)每個帖子詢問一個問題。這有助於其他具有相同問題的人通過搜索引擎更容易地找到他們的答案。 – StriplingWarrior

+0

請記住,您正在投射**參考**,而不是對象。更改引用的類型不會觸及它指向的對象。 –

回答

2

我沒讓你在你的第二個問題是什麼意思,所以我會後回答你的第一個和第三個問題,希望您將編輯您的問題,並改寫你的第二個問題。

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訪問修飾符。

+0

感謝您的解釋。 對於第二個問題,我的意思是說,在一個接口中,具有單個參數的方法可以接受來自許多不同類的參數對象的參數值,而這些參數值與繼承無關? – rullzing

+0

因此,將變量分配給子類或超類時需要進行轉換,對嗎? – rullzing

+0

內容翔實。謝謝。關於第一個問題,我想確認,如果我們可以將子對象分配給它的父對象? – Zeeshan

1
  1. 號當你有你分配給它A類型,任何一個變量必須AA的基準的超類型B不一定指的是‘A’。這是相反的方式。我想你在問什麼:如果一個方法接受一個類型爲接口的參數,它是否會接受實現此接口的各種類的實例,而沒有其他(繼承)關係在這些類之間?答案是肯定的:只要他們實現了這個接口,他們就是合法的參數。

  2. 不,默認情況下它們有包裝可見性

+0

非常感謝 – rullzing

相關問題