JAVA 多态 的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 18:38:38
小弟初学JAVA,java编程思想 书里的一段代码,有点看不懂,希望找个高手帮忙解决,最好能留QQ给我!

//c07:music:music.java 1
//Inheritance&upcasting 2

package c07.music 3
import com.bruceeckel.simpletest.*; 4
public class music{ 5
private static test monitor=new test(); 6
public static void tune(Instrument i){ 7
//... 8
i.play(NOTE.MIDDLE_C); 9
} 10
public static void main(string[] args){ 11
wind flute=new wind(); 12
tune(flute); 13
monitor.expect(new string[]{ 14
"wind.play()Middle C" 15
});
}
}///:~

问题1:第7行里的 tune() 方法的参数是 Instrument类里的i,
为什么在第9行里会有 i.play(NOTE.MIDDLE_C); <

问题1:
是参数他的类型是Instrument
也就是Instrument的一个实例就是他的引用
问题2:
它虽然没有声名但是有这句com.bruceeckel.simpletest
把他引入到这个类里面了,他在着里面你可以理解为只是个Instrument的引用类型
问题3:
private static test monitor=new test(); //它是在类被JVM倒入时先执行生成这个test对象。
作用那就不清楚了得看你引入的哪个test类里面expect()方法的代码了,(new string[]{ "wind.play()Middle C"});它的意思是这个方法的传入参数是个String类型的数组 。在这定义个String数组

问题1:Instrument是个类名,而且(Instrument i)这样传参数传过来的是个Instrument 对象,对象名字叫做i,所以下面可以用对象的方法i.play(NOTE.MIDDLE_C);
问题2:
import com.bruceeckel.simpletest.*; 4 看到这行代码了吗?Instrument 类应该在导入的包里,所以在当前类里可以直接用于传参。 至于为什么类对象可以作为参数传递不是我能解答的,应该问SUN的开发人员。
问题3:
那个类我不太明白,应该是用于记录日志这样的类吧。

问题1:i是Instrument的一个实例,虽然是参数,但是在传入的时候已经实例化了。所以可以用i.play(NOTE.MIDDLE_C)
问题2:wind flute=new wind(); wind应该是Instrument的一个子类,按照里氏代换原则,子类的实例化的时候,父类也实例化了,所以传入的时候已经是实例化的wind了。在package c07.music下,应该有Instrument.class这个文件。
问题3也没看明白。^_^

我的qq 我也是新手,但是这些我都看过了
加我,我给你介绍几个更好的东西。呵呵
经验哦。
嘿嘿 不加不给你
41433247

<