重新学习接口,对接口概念理解不够。
对此几个疑问:
1、有些接口会声明一些方法或者常量在里面,可为什么很多接口就只定义了一个接口名,{}里面却是空的。那接口在这里又起了什么作用呢?比如我们以Cloneable接口为例,我看了API,它有很多子接口。我自己的理解是,它先定义一个父接口,然后再实现很多子接口,子接口里再声明方法或常量,然后当我们需要不同子接口的时候再去实例化那些子接口。不知道这样的理解是不是对的?
2、哪种情况下我们要自己写接口?
3、接口对JAVA如此重要,在实际的项目开发中,如何知道我们要调用哪个接口?
现在就对这几个问题疑问较大,大家帮解一下疑惑。如果有更详细的接口资料,希望可以共享一下。谢谢!
我对接口的理解是,接口是方法声明的集合,而其主要是为了描述类的功能,但不明确指出具体的实现方式。
接口有以下特征:
1、接口中只可以定义常量和声明方法;
2、接口中的任何方法都是public类型的;
3、接口不能使用new操作符实例化;
问题:
1、关于Cloneable接口,在JDK帮助文档中有这样一段描述
"如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。"
如果我们再找找 Object的clone()方法,发现其实 protected 的。
也就是说 Cloneable接口是Java的标记接口(Serializable也是)。
2、很多情况下我们都需要自己去写接口。特别是要实现多态时。
举个例子:
某程序要读取外部文件,但按需求的不同,有两个格式不同的文件,这导致了读取方式不同,这时我们就可以用先写一个接口声明读取文件方法。再让两个类实现该接口,两个类中分别写了两种读取文件的代码。
在读取文件时,我们就可以这样写
[code="java"]IReadFile readFile = new ReadFileA();
//当需要读取另一文件时,就可以简单的修改代码
IReadFile readFile = new ReadFileB();[/code]
3、记住这段话:
"抽象不应依赖细节,细节应该依赖抽象"
比如:Web项目,manager、Dao一般都需实现接口。
以上是我对接口的总结,希望对你有帮助
比如你不想让别人知道你写的具体方法的时候,你就可以给别人一个接口,并且写一个接口说明书给别人调用,这样人家并不关心方法是怎么实现的,只关心你这个接口有哪些方法。像平时项目中,做接口的写完接口后肯定会写一个接口说明书,这样别人才能知道这个接口里面的方法以及功能,才能调用,就像一个API。
接口的作用其实是为了作业分配
一个大的项目不是一两个人单枪匹巴就可以完成的,
代码量也是很大的,所以就必须给开发人员分工,
而接口就很好的促成了这次分工
举个例子,就像你去一个饭馆吃饭,你不是去和厨子说你要吃什么什么,
让他帮你做一下,而是服务员那张菜单过来让你点菜
这里面,菜单就是一个接口,而里面的那些贴着照片,写着菜名的条目
就是接口里面的方法,他只是一个对顾客的承诺,在菜单里面并没有
真正的饭菜,就像接口里的方法没有实现体一样,而那些厨师会做,
服务员把菜单拿过去给后台的厨师,让他做这些菜,这就相当于在调用厨师
这个实现类的方法,这样一来,就实现了顾客和厨师的隔离效果。
所以一般在项目里就要多贯彻这些分层的思想,这既方便以后的维护,
也有利于团队开发,所以像数据库访问的方法一般都定义成DAO接口
只要接口一定下来,就可以一个人开发DAO的实现类,另一个人去实现业务逻辑,
而他们两个人就不需要直接的通信,类似于这种情况你就可以考虑中间加一接口层
在实际项目里就要根据具体情况来调用各种接口,不过那就要看具体问题了
这时你可以请教一下一些前辈,权当一些经验之谈,
有了经验以后就轻车熟路,信手拈来,不会再有这些疑惑了。
关于第1题,补充一句
"标记接口没有方法,使用它的惟一目的是使得可以用instanceof进行类型查询"(来自《Java 核心技术 卷I:基础知识》)