2013-03-10 75 views
0

我明白了爲什麼這是一個法律聲明,但爲什麼它會有用?Java。爲什麼這麼做很有用:Animal bear = new Bear();

如何從剛準備不同:

Bear bear = new Bear(); //? 

我能做些什麼對象動物熊=新熊();我不能用後者做什麼?

嘗試在澄清:

什麼是宣佈類似這樣的現實性差異:

A. SuperClass x = new SubClass(); 

銀兩,

B. SubClass x = new SubClass(); 

你能與對象在一個你可以做什麼不用B嗎?爲什麼你想要聲明這樣的對象?

謝謝!

+0

我不清楚你在這裏問什麼...... – Daedalus 2013-03-10 05:22:35

+0

@代達羅斯,我試着補充一些說明 – papercuts 2013-03-10 05:26:21

回答

4

一般而言,只要有可能,就希望有鬆耦合。部分原因是,這意味着你的代碼應該儘可能少地瞭解它所使用的對象。如果您的代碼知道這是一個Animal就足夠了,那麼爲什麼要讓它知道這是一個Bear?下週你可能想用Chicken來運行你的代碼。

通過將自己限制在Animal公開的界面上,您現在可以輕鬆地放入任何其他特定動物的位置,並且您知道您沒有使用任何Bear特定的方法。

-1

我想說我看到的主要區別是Bear bear = new Bear();定義爲一個對象BearAnimal bear = new Bear();是一個對象Animal。此方法將新的Bear定義爲動物,而另一個則將新的熊定義爲熊。兩者幾乎都是相同的事情,但是如果你需要new Bear()在一個特定的對象中,一種方法可能會更有用。

+1

不,在'Animal bear = new Bear();'這個對象仍然是'熊',但是*對象的引用*是一個'Animal'引用。 – 2013-03-10 05:51:23

0

實現多態併爲所有動物編寫通用代碼,而不是特定的熊。所以,動物=新的熊(),我們可以使用相同的參考,我們可以用它來指向其他不同的動物。