我有个书上的程序不明白是哪里有问题,是关于向上转型的;
有四个类文件;
(1)
package thinkinjava.c07;class Instrument {
public void play(){}
static void tune(Instrument i){
i.play();
}
}
(2)
package thinkinjava.c07;public class Wind extends Instrument {
public void play(Note n) {
System.out.println("Wind.play() " + n);
}
}
(3)
package thinkinjava.c07;public class Note {
private String noteName; private Note(String noteName) {
this.noteName = noteName;
} public String toString() {
return noteName;
} public static final Note
MIDDLE_C = new Note("Middle C"),
C_SHARP = new Note("C Sharp"),
B_FLAT = new Note("B Flat");
}
(4)
package thinkinjava.c07;public class Music {
public static void tune(Instrument i){
i.play(Note.MIDDLE_C); //这里提示i.play这行出错
}
public static void main(String[] agrs){
Wind flute = new Wind();
tune(flute);
}
} 在这里我把tune()方法里的参数改成Instrument的子类Wind就是正常的,可是这种向上转型在书上说是允许的,我不明白这是哪里错了为什么错了,所以请大家帮帮我
有四个类文件;
(1)
package thinkinjava.c07;class Instrument {
public void play(){}
static void tune(Instrument i){
i.play();
}
}
(2)
package thinkinjava.c07;public class Wind extends Instrument {
public void play(Note n) {
System.out.println("Wind.play() " + n);
}
}
(3)
package thinkinjava.c07;public class Note {
private String noteName; private Note(String noteName) {
this.noteName = noteName;
} public String toString() {
return noteName;
} public static final Note
MIDDLE_C = new Note("Middle C"),
C_SHARP = new Note("C Sharp"),
B_FLAT = new Note("B Flat");
}
(4)
package thinkinjava.c07;public class Music {
public static void tune(Instrument i){
i.play(Note.MIDDLE_C); //这里提示i.play这行出错
}
public static void main(String[] agrs){
Wind flute = new Wind();
tune(flute);
}
} 在这里我把tune()方法里的参数改成Instrument的子类Wind就是正常的,可是这种向上转型在书上说是允许的,我不明白这是哪里错了为什么错了,所以请大家帮帮我
Note.MIDDLE_C?
这有问题吧 这个没有问题的,这是个枚举类;回复frilly(秋◆水):
Instrument 没有 play(Note.MIDDLE_C) 这个方法 只有public void play(){}
这个也没有错的,因为我是通过调用它的导出类Wind自动向上转型来实现的