java14章上机练习,JAVA编程思想第4版第14章类型信息的练习26

复习JAVA编程思想第4版第14章类型信息的练习26时,clearSpitValve方法实现,最开始想直接搜答案,暂时没找到合适的,自己补充完成实现如下,欢迎拍砖:

法1:RTTI式

public enum Note {

MIDDLE_C, C_SHARP, B_FLAT; // Etc.

}

public class Instrument {

public void play(Note n) {

System.out.println("Instrument.play()");

}

}

class Stringed extends Instrument {

public void play(Note n) {

System.out.println("Stringed.play() " + n);

}

}

class Percussion extends Instrument {

public void play(Note n) {

System.out.println("Percussion.play() " + n);

}

}

class Electronic extends Instrument {

public void play(Note n) {

System.out.println("Electronic.play() " + n);

}

}

class Wind extends Instrument {

public void play(Note n) {

clearSpitValve();

System.out.println("Wind.play() " + n);

}

public void clearSpitValve() {

System.out.println("清理口水先!");

}

}

public class Music {

public static void tune(Instrument i) {

i.play(Note.MIDDLE_C);

}

public static void main(String[] args) {

Instrument flute = new Wind();

tune(flute); // Upcasting

}

}

法2:将prepareInstrument置于基类中

public class Instrument {

public void prepareInstrument(){

}

public void play(Note n) {

System.out.println("Instrument.play()");

}

}

class Stringed extends Instrument {

public void play(Note n) {

System.out.println("Stringed.play() " + n);

}

}

class Percussion extends Instrument {

public void play(Note n) {

System.out.println("Percussion.play() " + n);

}

}

class Electronic extends Instrument {

public void play(Note n) {

System.out.println("Electronic.play() " + n);

}

}

class Wind extends Instrument {

public void prepareInstrument(){

System.out.println("清理口水先!");

}

public void play(Note n) {

prepareInstrument();

System.out.println("Wind.play() " + n);

}

}

总结,整体上,法2是更通用一些,类似乐器的初始化要根据不同的乐器不同设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值