2017-08-03 13 views
1

は私がjava.net.SocketInputStreamが存在しないのはなぜですか?

InputStream is = socket.getInputStream(); 
System.out.println(is.getClass().getName()); 

のInputStreamは抽象クラスなので、socket.getInputStream()が返す必要があります... JavaのIOとソケットを学んでいます、とsocket.getInputStreamを()が実際に返す何をするかで混乱してしまいましたInputStreamのインスタンス化された子クラスです。私はは、私はEclipseでこのクラスをインポートしようとしていないこのクラスを見つけ

java.net.SocketInputStream 

であることが判明)。のgetName()上記のコードを使用して、実際のクラス名を取得しますが、is.getClass(.. 。

実際に何が起こったのですか?私はJavaの一部を誤解していますか?

+0

あなたはjavadocを読めばあなたは*直系の既知のサブクラスが表示されます。 たAudioInputStream、するByteArrayInputStream、FileInputStreamを、FilterInputStream、のInputStream、ObjectInputStreamの、持つPipedInputStream、たSequenceInputStream、StringBufferInputStream * –

答えて

4

クラスはpackage-privateです。 java.netパッケージの外から直接参照することはできません。

+0

は私のソースコードを参照してくださいするためにどのような方法がありますこのクラス? –

+2

@JingHe確かに、それはソースコードのzipにあります。これは、 'FileInputStream'を' FileDescriptor'コンストラクタで十分に拡張しています。ストリームに沿ってソケットを閉じるためのものがいくつかあります。そうでなければ何も興味のない、移動してください。 – EJP

+0

入手しました。どうもありがとう! –

2

私はEclipseでこのクラスをインポートしようとしていないこのクラスを見つけた...

クラスが存在するが、それだけでパッケージプライベート、そうない公開されています。 これは、クラスが同じパッケージ(java.net)内にある場合にのみ使用できることを意味します。 access controlsの概要を以下に示します。

明らかにパッケージjava.net内にあり、SocketInputStreamと呼ばれています。 FileInputStreamから拡張された通常のクラスです。ここで

は、ソースコードである:SocketInputStream at GrepCode

そして、ここではdocumentationです。それから引用する:

このストリームは、FileInputStreamを拡張してSocketInputStreamを実装します。このクラスはパブリックではありません。

関連する問題