ServerSocket server=new ServerSocket(10005);
Socket socket=server.accept();
InputStream in=socket.getInputStream();
String ip=socket.getInetAddress().getHostAddress();
int port=socket.getPort();
System.out.println("发送端IP:"+ip+"port:"+port);
int len=0;
byte[]buf=new byte[1024];
while((len=in.read(buf))!=-1)//问题————————
{
System.out.println(new String(buf,0,len));
}
OutputStream out=socket.getOutputStream();//问题————
out.write("你好客户端,数据已经时候到了,谢谢\r\n".getBytes());
//out.write("\r\n".getBytes());
socket.close();
server.close();
InputStream ,OutputStream 不是抽象类么?可以创建对象,怎么还可以调用方法呢?即in.read();out.write();
困惑啊,求解答!

解决方案 »

  1.   

    因为你InputStream in=socket.getInputStream();所得到的实际类,是InputStream的子类。你可以 System.out.println(in.getClass()); 看看就明白了。
      

  2.   

    InputStream ,OutputStream是抽象类没错,但是socket获取到的是继承了这两个类的具体类实例,同时也实现了其内部的抽象方法,当然就可以调用了就如List list = new ArrayList()一样的道理,其实就是多态而已。
      

  3.   

    System.out.println(in.getClass()); 
    System.out.println(out.getClass()); 
    结果
    class java.net.SocketOutputStream
    class java.net.SocketInputStream
    学了后面忘了前面,简单的多态都不理解了
    谢谢楼上几位了!真惭愧啊!