黑马程序员技术交流社区

标题: 我只想问一个问题 接口是不是类 [打印本页]

作者: 低调小邦    时间: 2014-8-31 00:21
标题: 我只想问一个问题 接口是不是类
求能解释清楚的高手给我指点 感激不尽  网上百度的就不要来了
作者: 舍我其谁    时间: 2014-8-31 00:37
张孝祥老师有说过,接口像类,但不是类
作者: yjiang_09    时间: 2014-8-31 01:56
接口明明就是一种特殊的抽象类好不好。。我没记错吧。。。。。。。
作者: 谢建平    时间: 2014-8-31 04:53
可以比喻像特殊的抽象类    但它确实不是类   API文档都把class和接口分开来了
作者: hejinzhong    时间: 2014-8-31 05:01
这些东西不是是不是的问题,只要自己明白了咋回事
作者: 嘿~~    时间: 2014-8-31 08:20
接口是一种特殊的类
作者: Apologize丶    时间: 2014-8-31 08:38
个人觉得不是类,我再学习过程中把接口比作门,想要用到屋子里的什么需要开门进去取丶
作者: Sakuratossi    时间: 2014-8-31 09:45
是类啊,是特殊的抽象类,把抽象类中的方法全都定义成抽象的,并且接口中的成员都要是public的,这样就是接口了
作者: 左脑想你    时间: 2014-8-31 09:52
肯定的告诉你不是!从侧面讲接口不能继承类只能被类实现。。。而object是所有类的基类
作者: 左脑想你    时间: 2014-8-31 09:54
嘿~~ 发表于 2014-8-31 08:20
接口是一种特殊的类

是类,那么他的父类是object吗?你去看看接口是没有继承object的,而且接口的顶层也是口
作者: EDDY_Liang    时间: 2014-8-31 10:05
接口是一个类型,是和注解、类、,枚举同级的,
以上都属于TYPE(类型)的子类。
你可以查一下java的api,里面有的
作者: MichaelRodman    时间: 2014-8-31 10:15
是吧。我的理解是一种特殊的抽象类。里边的方法全部为抽象方法(public abstract();),变量都是全局常量。(public final static).
作者: 我为你着迷    时间: 2014-8-31 10:36
有点乱啊    是类的和不是类的各占一半呀  是类  是一个特殊的抽象类  只能被实现  不能被继承   其实这个东西没有必要死磕着去纠结  你自己理解会用就好   面试相信不会问你接口是不是一个类的这种问题!   
作者: 隔夜修书    时间: 2014-8-31 10:59
接口比抽象类把抽象进行得更彻底,你可以把它看作一个特殊的抽象类。不过这个问题也不影响你学习接口。
作者: 夜半风    时间: 2014-8-31 11:01
是啊 接口就是为了扩展功能的类
作者: 空洞的望着窗外    时间: 2014-8-31 11:10
不是,接口像抽象类,但不是类。
作者: 她只是过客    时间: 2014-8-31 12:19
可以把它当成是一个类,这个类里全部都是抽象方法,不能有非抽象的,子类实现它就必须覆盖它里面全部的方法
作者: huangxuanheng    时间: 2014-8-31 12:33
谢建平 发表于 2014-8-31 04:53
可以比喻像特殊的抽象类    但它确实不是类   API文档都把class和接口分开来了  ...

以你的意思,抽象类不是类咯?
作者: 陈永赛    时间: 2014-8-31 15:02
看API文档最好啦,也许开发java的人都没对接口定义是不是类而纠结。
作者: Fightin黑马    时间: 2014-8-31 20:49
当类中所有的方法都是抽象方法的时候,这时我们在定义的时候就不再定义成类,而是定义成接口,也就是说接口是一种特殊的类,但不能等同于类.
作者: MeryStyle    时间: 2014-8-31 21:23
我感觉应该是吧,接口是抽象类啊,但是JAVA的API是把interface和class分开来单独定义的
作者: liqi    时间: 2014-9-1 07:56
这有什么疑问的啊,java的数据类型,8种基本类型和3中引用数据类型,引用数据类型是 类,接口,数组
类和接口是不同的引用数据类型,当然不一样了。
作者: 彭卫红    时间: 2014-9-1 10:32
抽象类是一种特殊的类,里面有抽象方法。接口是一种特殊的抽象类,里面的抽象方法都没有实体。照这么理解,可以说接口是一种特殊的类,只是里面的方法都没有实体
作者: gracious    时间: 2014-9-1 12:24
class--类
abstract --抽象
interface--接口
作者: ___瘦不了    时间: 2014-9-1 12:45
上面的回答很清楚了接口是抽象类,是一个特殊的类,其实这个概念很模糊,难于理解,楼主多看实例,相信会在心里对接口有一个自己的概念
作者: alexchy    时间: 2014-9-1 12:54
觉得像类,但是好像不这么说
作者: 付剑翊    时间: 2014-9-1 12:56
接口不是类,它的祖宗也不是OBJECT
作者: SeanSias    时间: 2014-9-1 13:08
接口不是类。
作者: SeanSias    时间: 2014-9-1 13:12
接口不是类。
刚开始的话可以理解为一个近似于抽象类。
接口需要被实现,接口中的成员有固定的修饰:常量 public static final 方法  public abstract
作者: 孤鸢    时间: 2014-9-1 13:31
左脑想你 发表于 2014-8-31 09:52
肯定的告诉你不是!从侧面讲接口不能继承类只能被类实现。。。而object是所有类的基类 ...

接口能继承接口
作者: 左脑想你    时间: 2014-9-1 15:18
孤鸢 发表于 2014-9-1 13:31
接口能继承接口

我又没有说不能。。。。。
作者: 范靖明    时间: 2014-9-1 15:27
个人认为接口不是类!
作者: 孤鸢    时间: 2014-9-1 18:59
左脑想你 发表于 2014-9-1 15:18
我又没有说不能。。。。。

额,我就是觉得你那肯定的语气太绝对了,接口毕竟是从类抽象过来的,当成抽象类理解也没啥不合理吧
作者: 左脑想你    时间: 2014-9-1 19:40
孤鸢 发表于 2014-9-1 18:59
额,我就是觉得你那肯定的语气太绝对了,接口毕竟是从类抽象过来的,当成抽象类理解也没啥不合理吧 ...

我问过老师。。。一点都不绝对。。。老师那样讲是为了说明接口的特点,而事实上程序语言的设计应该是从简单到复杂。
作者: 忆梦追风    时间: 2014-9-1 21:20
接口是一个特殊的里面方法全部都是抽象的抽象类
作者: 七丶哥    时间: 2014-9-1 21:29
和类差不多,但不是类,
作者: 家进    时间: 2014-9-2 13:08
可以当作类,因为接口会生成.class文件,可以不是类,类用关键字class修饰,接口用interface,有“平起平坐”的意思。主要还是区分他们的用法和功能。
作者: king13131313    时间: 2014-9-2 13:48
我觉得怎么定义都无所谓
会用就可以了吧
作者: zhuohong_xiao    时间: 2014-9-2 14:21
本帖最后由 zhuohong_xiao 于 2014-9-2 14:52 编辑

接口是更高层次的类。类包含成员属性与成员方法(方法是功能+内容的组合)。
而接口也是有成员属性和方法(方法不是一个具体的,只有一个具体的名字即功能。没有定义一个功能是怎么实现的即内容)。
其实你不应该老是去扣概念,你应该找一个对应的具体的东西来理解接口这个概念。就算你分清楚了接口和类的真正关系,这个意义不是很大。浪费时间。
除非你发这个问题只是为了黑马币。
我觉都毕老师在说接口实例的时候那个电脑主板的例子不错。你可以多看看。

下面是我对接口和类的理解。如果觉得好,你可以看看,不好可以直接无视。


我的理解是接口就是一个主板上的卡槽,卡槽就是接口最形象的比喻,也是最好理解的。
起到的一个作用就是一个连接的作用。
卡槽用针脚和主板连接,那个槽就用来插显卡啊内存条啊啥的,用来连接显卡啊内存条啊。来增加主板的功能。
可以将主板看成一个类(主类实现的对象),通过针脚连接卡槽(接口)卡槽又通过槽连接显卡,内存条(显卡和内存条可以看成一个扩展类实现的对象)
接口就是一个规则,一个协定。
类就是一个模板用来创建对象具有功能的实体。
俩个对象(实体)都符合一个相同的规则
俩个对象(实体)通过这个规则就可以使用对方的功能。来扩展自己的功能

作者: JerryJava    时间: 2014-9-2 14:22
个人觉得不是接口不是类,接口是对类的补充,进一步增强了Java的可扩展性和灵活性。
类是对于对象的抽象,是属性和方法的集合,成员方法可不抽象。 接口中的变量为静态全局常量,只能赋值一次,而其所有的方法都是抽象方法,接口更像是定义了一种标准,为了和多态一起使用来提高可扩展性。
粗线的认为 类的继承是体系下的东西,是在某一个体系下必要的功能,比如学生必须要会上课,会学习,工作的员工必须要有相应的技能完成工作。
而接口是用来进一步描述的,是让某类个体看起来更生动更有趣的,比如一个学生“小A”他会学习会上课,同时又会打Dota ,会打篮球,会给女朋友做饭,会扶老奶奶过马路等,我们并不需要把“小A”单独定以为一个类,我们只需要在学生类的基础上为他实现其他的(打dota,打球,做饭)等接口就好了。
我们对小A实现的接口越多,则小A这个形象就越鲜活,世界是没有一模一样的两片叶子,何况是人? 所以我们可以假设如果对于小A实现的接口足够多,最终我们会很明确的知道小A,其实就是xxx(如李逍遥)。

Java为了安全性和健壮性等的考虑是不支持多继承的,我们就需要用接口+多态来进一步的描述事物了。毕老师告诉我们,Java语言就是对现实事物的描述,而类就是搭建了一个大框架,接口就是进一步的描述,建立连接,一点一点的使某个物体更清晰。

像画素描一样,先要确定大轮廓,大轮廓和骨干都定下来之后再去抠细节,这样才能将现实映射到画布上, 描述的方法很多,而且几乎每个人都有不同的视角,至于谁能画的像,谁的画的比原有的更漂亮,即上升到艺术,那就要修炼了。
我们都拿着Java 这支画笔,在各自的屏幕上作画~ 大家一起加油!
To be continue...
用一张图来总结下自己的思路(有点丑不好意思):




作者: dftgg    时间: 2014-9-2 14:45
接口是一个特殊的类。 一个类可以实现多个接口
作者: 新新人类嘿嘿嘿    时间: 2014-9-2 16:18
这个问题没有必要纠结吧,分开理解就好啦
作者: 648947721    时间: 2014-9-2 17:39
接口就是接口,不是类,可以理解为类
作者: 不服™け你咬我    时间: 2014-9-2 17:40
特殊的类,,为了实现更多的方法
作者: MeryStyle    时间: 2014-9-2 18:09
接口不是类!
作者: 尚志    时间: 2014-9-2 18:16
接口是特殊的类、、
作者: 我行我SHOW‰    时间: 2014-9-3 06:01
这个问题貌似没有一个权威性的答案~~
作者: 刘挺    时间: 2014-9-3 12:12
正方形是不是属于长方形,是吧!但是是特殊的长方形,四边相等,我们叫它正方形
作者: 龙帅    时间: 2014-9-3 12:58
感觉不是类
作者: 郑飞    时间: 2014-9-3 18:27
我觉得老师说接口是特殊类 很大程度上是便于理解 接口神一般的存在 没必要和类去相比较
实在要比 就比功能作用 看起来差不多 其实天壤之别
作者: D.reamJA    时间: 2014-9-3 21:19
接口编译后生成的是 .class  文件




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2