A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 广驰 中级黑马   /  2012-8-17 17:08  /  1858 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看了接口部分的视频,有一些地方很迷惑

就是既然接口里面都没有实际的方法体,那为什么要定义接口呢,定义的对象要有接口中的方法功能的时候直接定义不就可以了吗,反正是都要实现的,都是要在代码中写出来的,也是要写那么多方法。

所以我的的疑问是定义一个接口,然后在去实现接口 而不是直接在类中定义接口的中方法的功能有什么意义和好处,总是想不明白,希望有人能指导一下。

还有在什么时候在类中直接定义特有方法,什么时候定义接口实现方法比较合适。

可能我描述的有些乱,但基本意思应该还是能看明白的吧!求指导

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 加油!

查看全部评分

10 个回复

倒序浏览
我的理解是,接口是对于那些你需知道要实现哪些功能,但是不知道怎么去实现,你可以定义一个接口,让知道实现的人去实现,然后等人家实现好以后,你自己调用就行。就像在sql中,java中定义了一系列的接口,但是它不知道怎么去实现,也没必要去实现。因为每个数据库对于同一个方法的实现方式不同,把实现的部分交给数据库厂商去实现。这样
你在编写程序的时候,你就只用调用去调用接口就行了。
不知道这样说能不能对你有点帮助

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 加油!

查看全部评分

回复 使用道具 举报
黑马-郑鹏 发表于 2012-8-17 18:33
我的理解是,接口是对于那些你需知道要实现哪些功能,但是不知道怎么去实现,你可以定义一个接口,让知道实 ...

可以直接调用接口吗??
回复 使用道具 举报
当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。
           用interface关键字表示。类与接口关系用implements表示。
        (2)接口的成员特点
                A:成员变量
                        是常量。
                        默认修饰 public static final
                B:成员方法
                        都是抽象的。
                        默认修饰 public abstract
        (3)关系
                A:类与类的关系
                        是继承关系。类与类只能单继承,可以多重继承。
                B:类和接口的关系
                        是实现关系。类可以多实现接口。
                        类在继承一个类的同时,可以实现多个接口。
                C:接口和接口的关系
                        是继承关系。接口可以多继承接口。
        (4)接口的特点
                A:是对外暴露的规则
                B:是程序的扩展功能
                C:接口的出现降低耦合性。
                        耦合(类与类之间的关系)
                        内聚(类完成功能的能力)

                        编程规范:低耦合,高内聚。
                D:接口可以多实现。

                举例:
                CPU和主板。
                笔记本的USB插口。

接口可以多实现
接口的出现避免了多继承的局限性。

希望你能够明白
回复 使用道具 举报
杨彪 发表于 2012-8-17 18:51
当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。
           用interface关键字表示。类与接 ...

接口的特点我知道,但你这个还是没有解答我的疑惑,我的意思是说直接在自己的类中定义,和同实现接口来完成定义,有什么不同,用借口来实现的话会有什么具体的好处,因为接口里面并没有实体代码,所以我不去实现接口而是自己定义应该也可以啊??最好通过代码实例来阐述接口的有点。
回复 使用道具 举报
本帖最后由 霍明波 于 2012-8-18 08:05 编辑

      对于你这个问题有点涉及到java思想方面的,java接口对java来来说是很重要的,接口可以提高程序的拓展性,灵活性。接口减轻了继承的压力(接口的优点可以多实现,而继承不行),避免了程序的臃肿,使程序看起来比较有条理(当程序不需要使用该方法时可以不用继承该接口,用到该方法实现有该方法的接口就可以)。
      重要的是其大大提高了程序的拓展性,接口和抽像有点类似,所谓的接口就是把一些共性的抽取出来单独封装成一个没有实体的类,从而可以有多个类来实现它,也就是说一个接口可以实现多种功能,举一个形象的比方:电脑机箱有音响接口、鼠标接口显示屏接口等等,就拿其中的显示屏来说吧,首先机箱和显示屏是实现接口连接的,也就是共用一个接口,按你所说的话把显示屏装在机箱上的话岂不是原来的大脑袋电脑,这是倒退了不可取,但是要是机箱和显示屏是通过实现接口方式连接的话,这时显示屏相当于实现接口的实例,机箱相当于你所说的类,降低了他们的耦合性,这时我们就可以换一个更高清的显示屏来升级电脑,也就是实现一个更高功能的接口(就是用接口(父类)作为引用指向实现此接口子类的对象,就是用到了多态性)。而原来的就没有那么必要了,如果是原来的大脑袋电脑要换显示屏的话就必须换电脑了,也就是你原来所写的代码都要重新写,显然没有提高代码的复用性,而在程序开发的时候简直是灾难。所有说在以后的程序升级中有很重要的作用,向你所说的那种砖头式的代买不可取。
        写了这些,希望对你有帮助,有疑问高兴探讨     如有不明白 请看毕老师的8-7视频   里面可能是你需要的
回复 使用道具 举报
给你举个例子:现在我要处理一个字符串str,字符串里含有<Script>语言,里面涉及敏感词,还有表情什么的。定义一个接口就叫做Filter,里面只有一个方法doFIilter。比如你要处理<Script>语言,你写一个ScriptFilter类实现这个接口,你要处理敏感词写一个SensitiveFilter类实现这个接口。他们都实现了Filter接口,这时你就可以定义一个数组Filter[] Filters={new ScriptFilter(),new SensitiveFilter()}, 然后循环遍历数组for(int i=0;i<filters.length;i++){s= f.doFilter(s)},System.out.println(s);这样你就可以得到处理结果,以后你想要扩展你的程序,比如说把简体字转换成繁体字,你再定义一个实现Filter的类,然后把他添加进filters就行了,其他代码不用修改。
先学会用,再考虑他具体有什么好处什么的,在用的过程中体验,祝你学习愉快!

评分

参与人数 1黑马币 +2 收起 理由
广驰 + 2 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 童兴龙 于 2012-8-18 08:17 编辑

要知道什么时候定义接口,那么首先就应该明白接口有什么作用。
接口的作用简单一点就是:接口是用来标记类的,不同的类属于不同的接口(通过向上转型),管理接口比管理各种各样的类方便多了,
接口体现了抽象的观点,什么是抽象?抽象就是无法准确定义的概念。
使用接口解决问题
  问题:现在我们要写个连接数据库的类给用户使用,有两个函数:一个返回Connection对象,另一个是关闭数据库,close(),一般的解决方法是:给每个数据库写一个类,再根据用户使用的数据库决定使用具体的类。  
  好的,我们看看这样有什么不好之处:  
  (1).首先每个类都要有重复的代码,造成代码的膨胀;  
  (2).其次最重要的是我们并不知道用户使用什么数据库,可能是Oracle,可能是mysql,也可能是sqlserver等,这个问题很难解决。  如果定义一个接口。让数据库都实现这个接口。就不用在单独给每个数据库分别写连接方法了。

再说定义接口的好处。
我自己说吧,Java程序API中定义了很多接口,这些接口都有自己的明确功能。然后你就可以根据你需要的功能然后再去找接口的实现类,。
你不用知道这个类是如何实现的拿来用就能实现你想要的功能。是不是很爽啊。就是方便查找工具类简单点想。
回复 使用道具 举报
高薇 中级黑马 2012-8-18 08:38:09
9#
打个比方吧,人是一个类,人有姓名、年龄属性,抽烟、生孩子等方法。
你可以定义一个基本类---人,将人所共有的属性添加到人这个类中,这里有姓名、年龄。
然后呢,再定义一个男人类,这时候他可以继承上面的类,只是抽烟是男人的特有方法(指代一般情况啊),生孩子不是吧,这时候可以将抽烟定义为接口,抽烟这个接口中不需要具体的实现,因为不一样的男人是不是抽的烟牌子不一样啊,这样男人类就可以实现这个接口了。
之后,再定义一个女人类,女人是不是可以不抽烟呀,所以他不必实现抽烟这个接口,而他可以实现生孩子这个接口啊,但是生男孩女孩还是人妖是是不是不一定呀,所以嘛,你可以通过女人类中复写生孩子这个方法,来实现接口。
这样说,你明白了吗?
对于一些只知道具体的方法,而不知道该怎样实现的函数,你可以定义为虚方法,但是虚方法如果都存在在一个抽象类中的话,在子类继承的时候,是不是都要复写父类的方法呀,这样是很麻烦滴,你看上面的如果生孩子抽烟都放到人这个抽象类中的话,是不是男人也要生孩子呀,很不合实际嘛,所以你可以将共有的属性该怎样描述就怎样描述,特有的属性通过接口来定义,子类来实现。这样就方便多了嘛,是吧,帅哥。
我个人是这样理解的啊,这例子有点那啥,但是呢,能看懂其中的道理就可以了,还有就是我说的比较啰嗦,理解下,我也是希望你能看懂的。如果还不明白呢,告诉我,我再给你写出代码来也可。
就到这里,休息休息!祝你好运咯!
回复 使用道具 举报
杨宗彬 发表于 2012-8-18 07:23
给你举个例子:现在我要处理一个字符串str,字符串里含有语言,里面涉及敏感词,还有表情什么的。定义一个 ...

看了你这个,基本有点明白了,今天又看了毕老师的第八天第6,7两个视频,基本上已经弄懂了接口的好处。谢谢了
回复 使用道具 举报
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马