注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

尝试将复杂的问题简单化-zzy

纸上得来终觉浅,绝知此事要躬行。

 
 
 

日志

 
 
关于我

教书是职业的要求,教学是份内的事,要努力做一个好教师.

网易考拉推荐

<oop> 实验十三 程序的多态性和抽象类  

2007-11-28 14:53:51|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 13.1  实验目的

1、进一步了解多态性的特点;

2、理解为什么要使用抽象类;

3、区分抽象类与具体类;

4、掌握多态性程序和抽象类程序的设计技巧。

13.2实验内容

1、调试、运行、分析c07:music3:Music3.java,并根据参考程序画出程序的UML图。下面是参考程序c07:music3:Music3.java:

注意:此程序与c07.music.Note有一定联系,要先调通music.Note,并明确各程序的路径分布。

//: c07:music3:Music3.java

// An extensible program.

package c07.music3;

import com.bruceeckel.simpletest.*;

import c07.music.Note;

 

class Instrument {

  void play(Note n) {

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

  }

  String what() { return "Instrument"; }

  void adjust() {}

}

 

class Wind extends Instrument {

  void play(Note n) {

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

  }

  String what() { return "Wind"; }

  void adjust() {}

}

 

class Percussion extends Instrument {

  void play(Note n) {

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

  }

  String what() { return "Percussion"; }

  void adjust() {}

}

 

class Stringed extends Instrument {

  void play(Note n) {

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

  }

  String what() { return "Stringed"; }

  void adjust() {}

}

 

class Brass extends Wind {

  void play(Note n) {

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

  }

  void adjust() {

    System.out.println("Brass.adjust()");

  }

}

 

class Woodwind extends Wind {

  void play(Note n) {

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

  }

  String what() { return "Woodwind"; }

}

 

public class Music3 {

  private static Test monitor = new Test();

  // Doesn't care about type, so new types

  // added to the system still work right:

  public static void tune(Instrument i) {

    // ...

    i.play(Note.MIDDLE_C);

  }

  public static void tuneAll(Instrument[] e) {

    for(int i = 0; i < e.length; i++)

      tune(e[i]);

  }

  public static void main(String[] args) {

    // Upcasting during addition to the array:

    Instrument[] orchestra = {

      new Wind(),

      new Percussion(),

      new Stringed(),

      new Brass(),

      new Woodwind()

    };

    tuneAll(orchestra);

    monitor.expect(new String[] {

      "Wind.play() Middle C",

      "Percussion.play() Middle C",

      "Stringed.play() Middle C",

      "Brass.play() Middle C",

      "Woodwind.play() Middle C"

    });

  }

} ///:~

2、Create an abstract class with no methods. Derive a class and add a method. Create a static method that takes a reference to the base class, downcasts it to the derived class, and calls the method. In main( ), demonstrate that it works. Now put the abstract declaration for the method in the base class, thus eliminating the need for the downcast.

 

13.3 实验程序和实验结果:

13.4 请简述您所理解的程序的“抽象类”。

 

  评论这张
 
阅读(401)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017