給定以下代碼:爲什麼使用你的超類創建一個對象?
public class Musician {
public void play() {
// do something
}
}
。
public class Drummer extends Musician {
public void turnsDrumStick() {
// do something
}
}
。
public class Guitarist extends Musician {
public void strummingStrings() {
// do something
}
}
我可以使用多態做到以下幾點:
Musician m1 = new Guitarist();
Musician m2 = new Drummer();
m1 = m2;
不過,我看不到子類的方法:
m1.strummingStrings(); //COMPILATION ERROR!
如果我使用:
Guitarist m1 = new Guitarist();
難道不是更好嗎?使用Musico類型引用子類的對象的優點是什麼?例如,我可以將m1 = m2;
歸爲一個可能性?還是還有其他優勢?
我看到了這個帖子,但我仍然不解:Using superclass to initialise a subclass object java
另一個優點是,如果你想把所有的音樂家放到一個數據結構中(比如列表),你可以做到這一點,沒有你不能做的超類。 – BackSlash
相關http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface。不知道我是否稱它爲重複或不是。 –
問題的標題不正確。它應該是類似於*「爲什麼使用超類參考的對象」* – UmNyobe