java 接口的疑惑
java的接口都是空,但是为什么一定要去实现他才能具有某些功能,即使自己写的方法和接口中的方法是一样的也不行,比如runnable中的run如果要实现多线程的话就一定要去...
java的接口都是空,但是为什么一定要去实现他才能具有某些功能,即使自己写的方法和接口中的方法是一样的也不行,比如runnable中的run 如果要实现多线程的话就一定要去实现runnable这个接口,并实现run()方法,但是如果我这个类自己写了一个run()方法而没去 implements Runnable 这样却不具有多线程的功能,为什么啊,
还比如 java.io.Serializable
我的意思就是为什么实现了某些接口就具有了某些功能呢?
说错了,请大家无视runnable~~
只要告诉我为什么继承了java.io.Serializable后就可以序列化了. 展开
还比如 java.io.Serializable
我的意思就是为什么实现了某些接口就具有了某些功能呢?
说错了,请大家无视runnable~~
只要告诉我为什么继承了java.io.Serializable后就可以序列化了. 展开
6个回答
展开全部
因为不论是Runable和Serializable,那是人家Java提供了内建的支持,说白了就是人家已经把一系列的工作都帮你做好了。
比如你所说的Serializable接口,没错它是空的。但你知不知道还有一个与序列化有关的接口:Externalizable?你看一下Java的源码就知道了,他也是一个处理对象序列化的类,里面有两个抽象方法voidreadExternal(ObjectInput in)和void writeExternal(ObjectOutput out) ,这个就是留给代码编写者自己实现序列化逻辑的接口。你如果自己有套序列化方案,那就使用Externalizable,如果没有自己的方案,那就用人家Java的Serializable,如果非要较真为什么使用了Serializable就能序列化呢?为什么我自己不能写一个XXXable来序列化呢?因为人家Java虚拟机就认“Serializable”这个名儿。。。。
这就是楼上所说的Java规范,人家Java就叫这名字,除非你给Oracle公司研发部打电话,说是把Java序列化类改叫XXXable,那这个接口也能起作用
比如你所说的Serializable接口,没错它是空的。但你知不知道还有一个与序列化有关的接口:Externalizable?你看一下Java的源码就知道了,他也是一个处理对象序列化的类,里面有两个抽象方法voidreadExternal(ObjectInput in)和void writeExternal(ObjectOutput out) ,这个就是留给代码编写者自己实现序列化逻辑的接口。你如果自己有套序列化方案,那就使用Externalizable,如果没有自己的方案,那就用人家Java的Serializable,如果非要较真为什么使用了Serializable就能序列化呢?为什么我自己不能写一个XXXable来序列化呢?因为人家Java虚拟机就认“Serializable”这个名儿。。。。
这就是楼上所说的Java规范,人家Java就叫这名字,除非你给Oracle公司研发部打电话,说是把Java序列化类改叫XXXable,那这个接口也能起作用
展开全部
这个怎么说呢,通俗的将,接口是一个规范,是一个标准,本事只是声明这个规范的内容,并不实现,而是有使用这个规范的人自己去实现。同时,如果你要使用这个规范,那么你就必须完全遵循这个规范才行,就像你买鞋(同比你实现的类)不能买一只(接口的部分方法)一样,既然买(实现),就得是完整的(全部实现接口)。当然,不同的厂家生产的鞋是不一样的,有皮鞋(实现类1),有凉鞋(实现类2),有拖鞋(实现类3),有高跟鞋(实现类4),他们都称之为鞋,是因为他们都实现了鞋的全部功能(两只),如果某个厂家生产出来的鞋只有一只,那么你买么?呵呵。
在上面的这个例子里,鞋的抽象意义就是接口,它规范了鞋应该是有2只(接口的方法)
你上面的例子也是,runnable只是一个标准,声明了什么样的实现类才可以具备多线程的功能,所以如果你要想实现多线程,那你就必须完全按照标准执行,不能缺斤少两,run方法是一定要有的
可能一时有点绕,慢慢体会吧
另外,继承和实现是两码事,基类和接口不一样的,基类是半成品,本身已经具备了鞋的基本功能,继承他的人先天性都已经有这个功能了
在上面的这个例子里,鞋的抽象意义就是接口,它规范了鞋应该是有2只(接口的方法)
你上面的例子也是,runnable只是一个标准,声明了什么样的实现类才可以具备多线程的功能,所以如果你要想实现多线程,那你就必须完全按照标准执行,不能缺斤少两,run方法是一定要有的
可能一时有点绕,慢慢体会吧
另外,继承和实现是两码事,基类和接口不一样的,基类是半成品,本身已经具备了鞋的基本功能,继承他的人先天性都已经有这个功能了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这东西说起来可就长篇大论了。实现Serializable接口,主要是为了让这个对象可以在网络中传输,在Java IO、Socket编程中用的特别多,当把一个对象的信息存储到流中时,这个对象必须实现实现Serializable接口,这是一个序列化的过程.而在前台需要将对象的信息从流读取出来的这个过程,是个反序列化的过程.
继承和实现某个接口是不同的概念。
inheritance(继承):Dog extends Animal,表示Dog is a Animal,狗就是一只动物
implements(实现):Door implements Alarm,表示Door like a Alarm,防盗门像报警器一样,有报警的这个功能
Java中虽然是单继承的,但是有了接口这个概念之后,其实也可以说是多继承的,因为一个类可以实现多个接口。
希望对你有些帮助,如果有什么问题,欢迎进一步的交流,谢谢
继承和实现某个接口是不同的概念。
inheritance(继承):Dog extends Animal,表示Dog is a Animal,狗就是一只动物
implements(实现):Door implements Alarm,表示Door like a Alarm,防盗门像报警器一样,有报警的这个功能
Java中虽然是单继承的,但是有了接口这个概念之后,其实也可以说是多继承的,因为一个类可以实现多个接口。
希望对你有些帮助,如果有什么问题,欢迎进一步的交流,谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关于Serializable接口,应该是说“实现”,而不叫“继承”。
这纯粹是一个内定的规则,一个能否序列化的标志!
规定了“要序列化,必须实现Serializable接口”,并没有什么关联实现方法之类的。
正如问“为什么String要叫String”那样,因为java语言就这样规定。
这纯粹是一个内定的规则,一个能否序列化的标志!
规定了“要序列化,必须实现Serializable接口”,并没有什么关联实现方法之类的。
正如问“为什么String要叫String”那样,因为java语言就这样规定。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是系统内部已经为这些接口做了实现。 你实现了这个接口就可以隐式的调用系统做的序列化实现。 就跟你打开dos窗口执行的一些固定的命令一样。window已经定义了你输入这些字符执行的是什么操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询