有什么好的例子来感受语言OO的功能和结构?

时间:2009-03-31 15:59:01

标签: oop

我一直在寻找简短以及很好的例子,以演示语言的OO功能作为其他程序员的介绍。通过“好”,我的意思是,它们可以运行并输出一些有意义而不是foobar的东西。

例如,您可以通过mergedelort示例通过mandelbrot集示例或函数方面演示大多数控制流构造。但我还没有找到OO结构的好例子。

1 个答案:

答案 0 :(得分:1)

一个非常简单易懂的“真实世界”示例是java.io.InputStream类及其子代。这是多态的一个很好的例子:如果你编写代码来理解如何使用InputStream,那么底层类的工作方式并不重要,只要它符合InputStream强加的契约即可。所以,你可以在某个类中有一个方法

public void dump(InputStream in) throws IOException {
  int b;
  while((b = in.read()) >= 0) {
    System.out.println(b);
  }
}

此方法无关心数据的来源。

现在,如果要将dump方法与文件中的数据一起使用,可以调用

dump(new FileInputStream("file"));

或者,如果要对来自套接字的数据使用dump,

dump(socket.getInputStream());

或者,如果你有一个字节数组,你可以调用

dump(new ByteArrayInputStream(theArray));

如果InputStream包含其他InputStream,则存在实现。例如,SequenceInputStream允许您将多个InputStream汇总为一个:

dump(new SequenceInputStream(new FileInputStream("file1"), 
                             new FileInputStream("file2"));

如果要创建自己的自定义InputStream,可以扩展InputStream类,并覆盖int read()方法:

public class ZerosInputStream extends InputStream {
  protected int howManyZeros;
  protected int index = 0;
  public ZerosInputStream(int howManyZeros) {
      this.howManyZeros = howManyZeros;
  }

  @Override
  public int read() throws IOException {
    if(index < howManyZeros) {
        index++;
        return 0;
    } else {
        return -1;
    }
  }

然后您可以在转储调用中使用

 dump(new ZerosInputStream(500));