2012-05-14 118 views
4

的類的java.io.Reader和java.io.InputStreamReader中都已經根據Java文檔類java.io.FileReader繼承閱讀完全相同的簽名java.io困境

public int read(char[] charbuf, int offset, int length) throws IOException 

現在的方法這些從讀取()方法上述類。

現在的FileReader作爲延伸InputStreamReader的進一步延伸閱讀器

(Reader <-- Inputstreamreader <-- FileReader) 

和讀()有兩個類別相同的簽名,應該不是已經說的InputStreamReader從Reader和的FileReader推翻讀()繼承那種過度的方法?或者我在這裏錯過了什麼?

另外,由FileReader繼承的兩個read()函數略有不同(在等待輸入時約有一個塊,而另一個則沒有)。

+0

文檔不會說「它繼承了兩個」,它只是列出了超類繼承的方法。它不會從繼承鏈中的「更高級」類中刪除繼承的方法。 –

+0

@dave:我剛纔看到..:p – WickeD

回答

4

InputStreamReader中的方法提供摘要方法的執行ReaderFileReader不會進一步覆蓋該方法;它只是繼承了InputStreamReader的實現。

注意,有讀簽名:

public int read() 
public int read(char[] cbuf, int offset, int length) 
public int read(char[] cbuf) 
public int read(CharBuffer target) 

InputStreamReader僅覆蓋了前兩項。也許這就是讓你困惑的原因?

+0

我覺得自己踢了! thnx jon !! – WickeD

1

那麼讓我們來檢查源代碼吧?

Reader

abstract public int read(char[] cbuf, 
    int off, 
    int len) throws IOException 

所以,abstract,沒什麼可看這裏。

InputStreamReader

public int read(char[] cbuf, 
    int offset, 
    int length) throws IOException 

{ 
     return sd.read(cbuf, offset, length); 
} 

所以在這裏我們有來自Reader方法的重寫。

最後,FileReader沒有定義這樣的方法,所以它只是從InputStreamReader繼承它。