我一直在寻找简短以及很好的例子,以演示语言的OO功能作为其他程序员的介绍。通过“好”,我的意思是,它们可以运行并输出一些有意义而不是foobar的东西。
例如,您可以通过mergedelort示例通过mandelbrot集示例或函数方面演示大多数控制流构造。但我还没有找到OO结构的好例子。
答案 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));