2012-02-06 97 views
1

的InputStream類的系統類可以如何包含「在」的InputStream類的對象?實例抽象類InputStream

+1

一個非常非常常見的問題... – 2012-02-06 15:32:11

回答

2

這是因爲in不是一個對象,它是一個參考。

它對InputStream或InputStream的子類的引用。作爲它的抽象,它只能是一個子類。

1

InputStream一個是抽象的,但是具體的類(由System.in實際引用的一個)可以是InputStream的任何亞類,包括anonymous class

javadoc for InputStream列出的某些亞類包括:

  • 的AudioInputStream
  • ByteArrayInputStream進行
  • 的FileInputStream
  • FilterInputStream中
  • 的InputStream(CORBA)
  • ObjectInputStream的
  • PipedInp utStream
  • 的SequenceInputStream
  • 的StringBufferInputStream

執行此代碼,以找出哪些子System.in實際是:

System.out.println(System.in.getClass()); 

息率這樣的回答:

class java.io.BufferedInputStream 
+0

我還要指出'in'不是一個對象,而是一個參考。 – 2012-02-06 15:33:57

2

System類定義的in場並不需要引用的具體實現的InputStream - 因爲你已經制定出來的,它不能 - 它只是需要引用一些延伸InputStream

至少在Linux上,in引用了一個本身包裝FileInputStream的BufferedInputStream。其他實現可能會有所不同,這就是要點:使用像InputStream這樣的抽象類允許實現類改變,並可能從一個Java版本更改爲下一個版本,同時保持調用代碼的快樂。