【发布时间】:2014-02-11 17:10:57
【问题描述】:
给定以下代码:
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
【问题讨论】:
-
另一个好处是,如果你想把所有的音乐家放到一个数据结构中(比如一个列表),你可以做到,没有超类你做不到。
-
与stackoverflow.com/questions/383947/… 相关。不知道我是否会称它为重复。
-
您的问题标题不正确。它应该类似于“为什么要为对象使用超类引用”
-
在像这样的孤立的 sn-ps 中,多态性的例子通常看起来过于成熟和多余。你需要看到一个更大的、设计良好的代码库来理解这些微妙之处。
-
@BackSlash,我不明白你,因为如果我有一个 List
list = new ArrayList (),我可以放吉他手或鼓手,即使我已经创建了两者作为子类。
标签: java oop polymorphism