当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

java的扩大性[Java编程]

赞助商链接



  本文“java的扩大性[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

目前,让我们仍旧返回乐器(Instrument)示例.由于存在多形性,所以可按照自己的需求向系统里加入肆意多的新范例,同时毋需更改true()办法.在一个计划杰出的OOP程序中,我们的大大都大概全部办法城市顺从tune()的模子,并且只与底子类接口通信.我们说这样的程序具有“扩大性”,因为可以从通用的底子类担当新的数据范例,从而新添一些功效.假如是为了适应新类的要求,那么对底子类接口举行操作的办法根本不需求改变,
关于乐器例子,假定我们在底子类里加入更多的办法,以及一系列新类,那么会呈现什么情形呢?下面是表示图:

全部这些新类都能与老类——tune()默契地工作,毋需对tune()作任何调整.即便tune()位于一个独立的文件里,而将新办法增添到Instrument的接口,tune()也能精确地工作,不需求重新编译.下面这个程序是对上述表示图的具体实现:

//: 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);
  }
} ///:~
新办法是what()和adjust().前者返回一个String句柄,同时返回对那个类的阐明;后者使我们能对每种乐器举行调整.
在main()中,当我们将某样东西置入Instrument3数组时,就会自动上溯造型到Instrument3.
可以看到,在环绕tune()办法的其他全部代码都发生改变的同时,tune()办法却丝毫不受它们的影响,仍然故我地正常工作.这恰是操纵多形性但愿到达的目标.我们对代码举行改正后,不会对程序中不该遭到影响的部份造成影响.此外,我们认为多形性是一种至关重要的技术,它答应程序员“将发生改变的东西同没有发生改变的东西区脱离”.
  以上是“java的扩大性[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .