关于java:为什么要为对象使用超类引用?

Why use a superclass reference for an object?

本问题已经有最佳答案,请猛点这里访问。

给定以下代码:

1
2
3
4
5
6
public class Musician {

    public void play() {
        // do something
    }
}

.

1
2
3
4
5
6
public class Drummer extends Musician {

    public void turnsDrumStick() {
        // do something
    }
}

.

1
2
3
4
5
6
public class Guitarist extends Musician {

    public void strummingStrings() {
       // do something
    }
}

我可以使用多态性来执行以下操作:

1
2
3
4
    Musician m1 = new Guitarist();
    Musician m2 = new Drummer();

    m1 = m2;

但是,我看不到子类的方法:

1
    m1.strummingStrings(); //COMPILATION ERROR!

如果我使用:

1
Guitarist m1 = new Guitarist();

不是更好吗?使用musico类型引用子类的对象有什么好处?比如说,我可以将m1 = m2;作为属性吗?或者还有其他优势?

我看到了这个帖子,但是我还是很困惑:使用超类来初始化子类对象Java