WEB 开发 开发语言 Java 技术 .Net 技术 数 据 库 硬件使用
图象媒体 Linux/Unix 移动平台 嵌入开发 Windows 专区 软件工程
Ajax 技术 | ASP | PHP | ASP.NET | C# | JSP | Access | Oracle | 网页设计 | Flash | 安全专题 | IIS | VC/MFC | Delphi | C/C++
 你的位置:首页 > Java 技术 > J2SE / 基础类

有个关于JAVA向上转型的问题
[ 来源:ITWENKU 时间:2007-4-12 18:54:08 | 浏览:245人次 ]

我有个书上的程序不明白是哪里有问题,是关于向上转型的;
有四个类文件;
(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?
这有问题吧


Instrument 没有 play(Note.MIDDLE_C) 这个方法 只有public void play(){}



呵...谢谢大家了,我找到问题所在了,是因为Instrument类的tune和Music类的tune在调用时起冲突了.

回复www203(水户洋平):
Note.MIDDLE_C?
这有问题吧

这个没有问题的,这是个枚举类;

回复frilly(秋◆水):
Instrument 没有 play(Note.MIDDLE_C) 这个方法 只有public void play(){}
这个也没有错的,因为我是通过调用它的导出类Wind自动向上转型来实现的


 相关文章
·读取大图片总是不行高手执教
·todo的使用?
·请问如何设置eclipse是其使用sun的Java编译器,而不是它自己的,谢谢
·关于static变量的用法
·在java中有哪个方法可以解决下面的问题啊:如取得一个雇员编号,当雇员编号<10需要在前面补0
·咨询个有关think in java 的问题。

 推荐文章
你们帮我改一下这个程序,它的界面怎么没有!
Socket问题
程序为什么会出现这样的异常
finally的神秘问题
右移>>>的问题
如果一个类里的构造函数含有本身类的对象,那该怎么处理的或怎么理解的?
大家遇到过jvm coredump的情况吗
请教: JDBC怎么传一个数(字符串)给数据库?(调用数据库的function)
编写一个java程序
求救:循环问题,在线等!!!
js里的document.write总是转到新的页面输出???
菜鸟..问问题了.. GUI 对一个初学者有没有很大的作用...我的那本书就那个没学得好.有谁能指教一下..谢谢
 版权所有:IT问库
copyright © 2006 www.itwenku.cn all rights reserved.