你自己看一下InputStream的实现就明白了。
简单的说:
read(byte[]) 调用 read(byte[],int,int)
read(byte[],int,int) 调用 read()
明白了吧,read()是基础,
另外两个其实是实现了一个读取的不同方式,而读取功能本身的实现是写在read()里的,
需要继承这个抽象类的类自己实现。

解决方案 »

  1.   

    抽象类的原则是尽量只让子类实现基础方法,而自身实现通用方法,否则的话直接设计成接口不就行了,何必要有抽象类。
    read(byte[])可以通过循环调用read实现,所以子类不必要实现它(当然通常子类会override这个方法去写自己的实现的,但这只是效率上的考虑),而read就不能这样了,它属于基础方法,不同的inputstream实现是不同的,所以需要子类来实现,因此只能是抽象的。