就是个猜想,我说出来让大家看看

我是你一一哥 2013-08-12 07:52:14
Socket s=new Socket();
outputstream os=s.getoutputstream();

outputstream表示输出字节流的所有类的超类。
public OutputStream getOutputStream()throws IOException 返回的是输出流。

也就是说返回了一个outputstream类的实例(我知道这么说是错的,因为抽象类无法实例化)。那声明的os是怎么指向这个对象的。我猜想这里有一个类继承了outputstream,实例化后返回,那这个类就很神秘了,因为连个名字都不知道。如果没有这个类,那你返回一个抽象类对象,不就错死了!!!
...全文
293 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ncist_jianeng 2013-08-13
  • 打赏
  • 举报
回复
哥们好奇心太强了,你本来就不用知道具体的实现类是哪个。你只要知道每个类的功能是什么就行了
lkq_david 2013-08-13
  • 打赏
  • 举报
回复
同意楼上的 System.out.println(os.getClass());
n27741 2013-08-13
  • 打赏
  • 举报
回复
返回一个【抽象对象】?何来抽象对象一说啊 它只返回一个 实现了 OutputStream 子类对象 或者null 并保证该实现的方法都实现了,该有的数据都有了; 有实际的内存空间货真价实的对象;
liujun3512159 2013-08-13
  • 打赏
  • 举报
回复
顶起来,呵呵。
马达马达达 2013-08-13
  • 打赏
  • 举报
回复
楼主多看看继承和多态吧 总之一句话:父类变量可以引用子类对象 Outputstream os是父类变量 public OutputStream getOutputStream()throws IOException 返回的是输出流,并且这个输出流是OutputStream的子类对象(子类实例) 所以Outputstream os = s.getoutputstream();就可以 你要是换成FileOutputstream os = s.getoutputstream();就得报错了
rumlee 2013-08-12
  • 打赏
  • 举报
回复
看看java基础吧。 另外你如果希望知道os这个对象实际是一个什么类的实例,你可以用 System.out.println(os.getClass());

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧