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方法?