正在加载图片...
候,接口可能会“变窄”,但是再小也不会比 Instrument的接口更 把对象的类型忘掉 可能你会觉得 Music. java有些奇怪。为什么会有人要故意“忘掉”对 象的类型呢?上传就是在做这件事情。但是,让tune()直接拿Wind 的 reference作参数好像更简单一些。但是这会有一个问题:如果采用 这种方法,你就得为系统里的每个 Instrument都写一个新的tune() 方法。假设我们顺着这个思路,再加一个 Stringed(弦乐器)和一个 Brass(管乐器): 77: c07: music: Music2. java / Overloading instead of upcasting package c07. music import com. bruceeckel simpletest. class stringed extends Instrument pub id play (Note n)t System. out. println("Stringed play()+ n)i class Brass extends Instrument public void play(note n) System. out public class Music2 t private static Test monitor new Test( public static void tune(Wind i)( 1. play (Note. MIDDLE C) public static void tune(Stringed i)i public static void tune(Brass i)i 1. play(Note. MIDDLE C)i public static void main(String[ args) i Wind flute new wind(i Stringed violin new stringed()i Brass frenchHorn new Brass ( tune(flute)i// No upcasting tune(violin)i tune(frenchHorn) monitor. expect(new string[] t "Stringed play () Middle C" Brass. play () Middle C }/// 第4页共29页 www.wgqqh.com/shhgs/tij.html emailshhgsasohu.comChapter 7: Polymorphism 第 4 页 共 29 页 www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.com 候,接口可能会“变窄”,但是再小也不会比 Instrument 的接口更 小。 把对象的类型忘掉 可能你会觉得 Music.java 有些奇怪。为什么会有人要故意“忘掉”对 象的类型呢?上传就是在做这件事情。但是,让 tune( )直接拿 Wind 的 reference 作参数好像更简单一些。但是这会有一个问题:如果采用 这种方法,你就得为系统里的每个 Instrument 都写一个新的 tune( ) 方法。假设我们顺着这个思路,再加一个 Stringed (弦乐器)和一个 Brass (管乐器): //: c07:music:Music2.java // Overloading instead of upcasting. package c07.music; import com.bruceeckel.simpletest.*; class Stringed extends Instrument { public void play(Note n) { System.out.println("Stringed.play() " + n); } } class Brass extends Instrument { public void play(Note n) { System.out.println("Brass.play() " + n); } } public class Music2 { private static Test monitor = new Test(); public static void tune(Wind i) { i.play(Note.MIDDLE_C); } public static void tune(Stringed i) { i.play(Note.MIDDLE_C); } public static void tune(Brass i) { i.play(Note.MIDDLE_C); } public static void main(String[] args) { Wind flute = new Wind(); Stringed violin = new Stringed(); Brass frenchHorn = new Brass(); tune(flute); // No upcasting tune(violin); tune(frenchHorn); monitor.expect(new String[] { "Wind.play() Middle C", "Stringed.play() Middle C", "Brass.play() Middle C" }); } } ///:~
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有