日期:2011-03-22 16:17:00 来源:本站整理
java的扩大性[Java编程]
本文“java的扩大性[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
目前,让我们仍旧返回乐器(Instrument)示例.由于存在多形性,所以可按照自己的需求向系统里加入肆意多的新范例,同时毋需更改true()办法.在一个计划杰出的OOP程序中,我们的大大都大概全部办法城市顺从tune()的模子,并且只与底子类接口通信.我们说这样的程序具有“扩大性”,因为可以从通用的底子类担当新的数据范例,从而新添一些功效.假如是为了适应新类的要求,那么对底子类接口举行操作的办法根本不需求改变,
关于乐器例子,假定我们在底子类里加入更多的办法,以及一系列新类,那么会呈现什么情形呢?下面是表示图:
全部这些新类都能与老类——tune()默契地工作,毋需对tune()作任何调整.即便tune()位于一个独立的文件里,而将新办法增添到Instrument的接口,tune()也能精确地工作,不需求重新编译.下面这个程序是对上述表示图的具体实现:
新办法是what()和adjust().前者返回一个String句柄,同时返回对那个类的阐明;后者使我们能对每种乐器举行调整.//: Music3.java // An extensible program import java.util.*; class Instrument3 { public void play() { System.out.println("Instrument3.play()"); } public String what() { return "Instrument3"; } public void adjust() {} } class Wind3 extends Instrument3 { public void play() { System.out.println("Wind3.play()"); } public String what() { return "Wind3"; } public void adjust() {} } class Percussion3 extends Instrument3 { public void play() { System.out.println("Percussion3.play()"); } public String what() { return "Percussion3"; } public void adjust() {} } class Stringed3 extends Instrument3 { public void play() { System.out.println("Stringed3.play()"); } public String what() { return "Stringed3"; } public void adjust() {} } class Brass3 extends Wind3 { public void play() { System.out.println("Brass3.play()"); } public void adjust() { System.out.println("Brass3.adjust()"); } } class Woodwind3 extends Wind3 { public void play() { System.out.println("Woodwind3.play()"); } public String what() { return "Woodwind3"; } } public class Music3 { // Doesn't care about type, so new types // added to the system still work right: static void tune(Instrument3 i) { // ... i.play(); } static void tuneAll(Instrument3[] e) { for(int i = 0; i < e.length; i++) tune(e[i]); } public static void main(String[] args) { Instrument3[] orchestra = new Instrument3[5]; int i = 0; // Upcasting during addition to the array: orchestra[i++] = new Wind3(); orchestra[i++] = new Percussion3(); orchestra[i++] = new Stringed3(); orchestra[i++] = new Brass3(); orchestra[i++] = new Woodwind3(); tuneAll(orchestra); } } ///:~
在main()中,当我们将某样东西置入Instrument3数组时,就会自动上溯造型到Instrument3.
可以看到,在环绕tune()办法的其他全部代码都发生改变的同时,tune()办法却丝毫不受它们的影响,仍然故我地正常工作.这恰是操纵多形性但愿到达的目标.我们对代码举行改正后,不会对程序中不该遭到影响的部份造成影响.此外,我们认为多形性是一种至关重要的技术,它答应程序员“将发生改变的东西同没有发生改变的东西区脱离”.
以上是“java的扩大性[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:java覆盖与过载
- ·下一篇文章:在java中产生切确的行为
- ·中查找“java的扩大性”更多相关内容
- ·中查找“java的扩大性”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论