多态和构造方法 空引用这弄不明白了 不知道为什么出现空指针异常


public class Test {
    public static void main(String[]  args ) { 
        Musician musician = new Musician();
        Erhu erhu = new Erhu();
        new Musician(erhu);
        musician.play();
        Piano piano = new Piano();
        new Musician(piano);
        musician.play();
        Violin violin = new Violin();
        new Musician(violin);
        musician.play();
    }
}
class Musician{
    Instrument i;
    public Musician() {
        
    }
    public Musician(Instrument i ){
        this.i = i;
    }
    public void play() {
        i.makesound();
    }
}
class Instrument{
    public void makesound() {
    }
}
class Erhu extends Instrument{
    public void makesound() {
        System.out.println("二胡的声音!!!!!");
    }
}
class Piano extends Instrument{
    public void makesound() {
        System.out.println("钢琴的声音!!!!!");
    }
}
class Violin extends Instrument{
    public void makesound() {
        System.out.println("小提琴的声音!!!!!");
    }
}

调用构造方法Musician 目的是把erhu等传给i
调用构造方法会创建一个新的对象,两个对象互不干扰,你并没有将erhu传给你想调用paly方法的那个Musician对象。

        Musician musician;
        Erhu erhu = new Erhu();
        musician = new Musician(erhu );
        musician.play();
        Piano piano = new Piano();
        musician = new Musician(piano);
        musician.play();
        Violin violin = new Violin();
        musician = new Musician(violin );
        musician.play();

代码敲错了吧,Musician musician = new Musician();你一直是调用用这个musician对象的play方法,但是你没有为它传Instrument的对象。
Erhu erhu = new Erhu();
new Musician(erhu);
musician.play(); // 空的Instrucment,你的本意是让上面new的对象调用play方法?