采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
1.定义一个接口,同时有readable 和 appendable 方法是可以的啊,为什么视频讲解中说不行?
比如我有一个类,名字叫ReadWriter,实现了Readable和Appendable。别人要同时使用Readable和Appendable接口,那么别人要定义一个叫做ReadableAndAppendable接口。
然而我的ReadWriter虽然分别实现了Readable和Appendable,但是并没有实现ReadableAndAppendable。我要给别人用,也要“跟着改”,去实现ReadableAndAppendable。
我之后的例子里会采用Retriever和Poster模拟这样的任务,可以看到Go语言能够很自然的完成。您可以用这个Retriever和Poster的例子想想在Java中很难做到。
非常感谢!
那我们可以同时引入两个接口吗,java有这样的设计吗
比如,老师说的readable和appendable,那只需要在java里面定义两个函数,然后让需要使用的类来继承这个类,这样不就可以直接引用这两个类吗?为什么一定要有接口呢,老师我问的问题可能有些弱智,因为我实在不懂接口的设定是为了什么。。
这个问题,我来说明下,假设同学A写了一个方法copyFile,这个方法需要传入一个参数,这个参数需要既能读也能写,A同学就想,我们写代码一定要面向接口编程,所以写了一个接口CanReadAndWrite来作为方法的参数,代码大概长下面这样:
public
interface
CanReadAndWrite {
String read();
void
write();
}
static
copyFile(CanReadAndWrite rw) {
// TODO...做一些文件拷贝的工作
A同学想,我定义了这个公共方法,以后组里面的其他同事如果需要这个功能,调用这个方法就行了!!
然后B同学刚好也需要一个类似的copyFile的方法,B同学英语可能不咋滴,按他的理解,这个方法应该大概叫copySomething,于是他搜索来一下,发现没这样的方法,于是想自己封装一个,于是有来下面的代码:
<R
extends
Readable & Writeable>
copySomething(R r){
// TODO...做一些文件拷贝工作
B同学英语虽然不咋样,但是编程基础更好,他想传进来的参数既能读又能写,那这个对象应该实现读写的接口,他先到jdk中找有没有这样的接口,发现了Readable接口和Writeable接口(假设jdk有这两个接口,我这里是随便写的),于是就限定参数必须实现这两个接口,既然jdk已经提供了就不需要自己定义了嘛!(而且接口的功能应该是单一性的,A同学的这个接口定义的确实不咋地)
最后,问题出现了,这个A同学虽然编程思维不如B同学,但他是项目组老大,他说:B同学,你这个接口已经有现成的了(也就是他自己定义的copyFile),大家用的都是这个,不要搞特殊化了,你也用这个吧,此时B的功能开发的差不多了,现在如果要改成A的copyFile方法,传的参数就必须实现A同学的CanReadAndWrite接口,,,,
以上就是大概的说明,举的例子比较简单,项目中可能更复杂,大家可以展开想象,
duck typing的概念应该就是只要参数有read方法和write就行,我不用你实现啥接口,如果有duck typing,B同学的参数就能传到A同学定义的copyFile方法里,
老哥 这个例子举得很好啊,谢谢。 duck typing就是 不管你是什么,只看你能做什么。
还有用的人会一路跟着改是什么意思?能够举个例子呢
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.9k 14
790 1
2.2k 1
1.2k 12
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号