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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张扬 中级黑马   /  2012-5-29 21:59  /  2874 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口光有描述,而没有实现,那用接口有什么用呢?直接编写一个类,需要什么方法直接写出来就完了,干嘛非要定义一个接口然后再去实现?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

12 个回复

倒序浏览
接口里面的抽象方法是一些比较共性的,它是不断向上抽取而得到的,如果都像你所说的需要什么方法直接编写个类,如果几个类都需要那样的方法岂不是要每个类都要定义那个方法,举个例子比如说动物,他们都有吃饭睡觉等很多相同的的行为,那么我们就可以把这些方法定义在接口中让子类去实现此接口,具体怎么实现里面的方法要看子类自己的需要,并且定义成接口可以让类多实现,如果只定义为一个类的话,就算是子类继承了,也只是单继承,就不能再继承其他的类了,接口的出现就是解决单继承的问题,因为接口可以多实现。

点评

我还是不清楚 “如果几个类都需要那样的方法岂不是要每个类都要定义那个方法” 就是定义了接口 每个类里还不是要重新写那个方法 又不是不用写  发表于 2012-5-30 00:32

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
接口里面的抽象方法是一些比较共性的,它是不断向上抽取而得到的,如果都像你所说的需要什么方法直接编写个类,如果几个类都需要那样的方法岂不是要每个类都要定义那个方法,举个例子比如说动物,他们都有吃饭睡觉等很多相同的的行为,那么我们就可以把这些方法定义在接口中让子类去实现此接口,具体怎么实现里面的方法要看子类自己的需要,并且定义成接口可以让类多实现,如果只定义为一个类的话,就算是子类继承了,也只是单继承,就不能再继承其他的类了,接口的出现就是解决单继承的问题,因为接口可以多实现。
回复 使用道具 举报

说简单点定义接口是为了方便以后的功能拓展,

举一个例子:

就像你的电脑定义特定的USB接口,假如你买电脑的时候硬盘是80G ,但是到了后期你发现 80 G 的储存空间已经不能达到你的需要,

这个时候你不会重新买一个 300G 的硬盘换上吧,你可以通过USB 接口 连接一个移动硬盘来扩展。
  
  而定义接口,就像电脑的USB接口,定义接口类型,只用类型符合才能使用。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
接口是为了什么呢?就是为了方便功能的扩展.你只要按照我定义的规则去实现就可以.

举一个例子:

   有人这个类,有两个interface,一个是抽烟,一个是喝酒。并不是所有的人都抽烟,也并不是所有的人都喝酒。所以,当我们想要描述一个抽烟的人,就让他实现抽烟接口就哦了,描述一个喝酒的人,就让他实现一个喝酒的接口就好了。
  
  而定义接口,就是为了功能的扩展。

这些在老毕的视频的视频里讲的很详细的,

QQ截图20120529231143.png (69.44 KB, 下载次数: 109)

QQ截图20120529231143.png
回复 使用道具 举报
贾旭 发表于 2012-5-29 23:16
接口是为了什么呢?就是为了方便功能的扩展.你只要按照我定义的规则去实现就可以.

举一个例子:

那还不是描述了两个类   一个抽烟的类继承人类  然后就我里面直接抽      一个喝酒的类我也继承人类 然后我里面直接喝       我实现接口我里面要写抽烟 喝酒   我不实现也是写   为啥非要实现接口
回复 使用道具 举报
接口的功能就是为了实现功能的通用与扩展还有其可封装性;
里边的方法全部是未实现的 而且都默认抽象;你可以写不同的接口 在里面定义不同的未实现方法,当你想实现什么功能 实现对应的接口并实现其方法即可;

--接口光有描述,而没有实现,那用接口有什么用呢?直接编写一个类,需要什么方法直接写出来就完了,干嘛非要定义一个接口然后再去实现?--

这就要涉及到封装了,封装的一种方式是通过使用接口(Interface)实现的。接口提供一种途径,使类隐藏其处理的特定事物的细节,仅对外公布它必须支持的属性。对于编程所涉及的,你可以修改类的实现,而不修改它的调用,因为属性本身没有改变,修改的仅仅是类的实现。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
王超 中级黑马 2012-5-30 06:18:52
8#
接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
但接口定义的成员函数默认都是abstract,所以不可以创建对象。
所以需要被子类实现,子类对接口中的抽象方法全部覆盖后,这样子类才可以被实例化
那为什么要使用接口呢?
接口提高了程序的功能扩展。增加程序的扩展性和灵活性。
回复 使用道具 举报
朝哥 中级黑马 2012-5-30 09:20:48
9#
lz,莫纠结,接口就好比宪法,地方法律完全可以按照自己本地的特点来创造本地的法律,但为什么还要宪法呢?说白了,就是一种规范,你只能按照我们共同定义的规范做。
跟1+1没什么区分,规范而已。你要一直纠结1+1为什么不等于3,那你数学题崩做了。有些问题就按这么做,不要问为什么,按照做了就没事,不按照做肯定编译出错!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
Zhang_qian 发表于 2012-5-29 22:19
接口里面的抽象方法是一些比较共性的,它是不断向上抽取而得到的,如果都像你所说的需要什么方法直接编写个 ...

接口中的方法是共性的你只要实现接口就必须重写方法,要是像你所说的那样几个类里都有这样的方法,那么也必须都写啊,不是说实现了接口重写方法了,接口里面的方法都是抽象的必须重写,其实接口也就是提高扩展性。
回复 使用道具 举报
lz就不要纠结了,说白了接口就是SUN公司给我们弄得规范。叫所有的程序员都按照它制定的规则去玩,而SUN公司呢就可以靠这个获取利益。
就像 一流公司做标准,二流公司做技术,三流公司做生产
回复 使用道具 举报
whocases 黑马帝 2012-5-30 17:25:38
12#
接口有什么用这个问题,我倒是用到了。
你看过spring框架的知识就应该知道了。我简单的说下。
在实际的开发中很少new对象,都是通过接口,spring框架来做的;
程序中如果new了对象的话,就把程序写死了。如果用一个新的类的替换了以前类的话,那么你就的改动以前的代码。不方便。
这个时候,你可以在程序申明一个接口。在spring配置文件中配置好这个接口的实现类class就可以了。原来的代码不用任何的改动;
其实这也体现了java的多态。

spring框架会根据set方法或者构造方法,生成对象;
说的还有点乱。

在说白点:就是你定义了接口A,然后再定义好接口的实现类B。在使用实现类B的地方(X类中使用到了B)都换成接口A类来做(java的多态,实际使用的是实现类B),
因为需求的变化,或者其他原因,B类已经满足不了需求了。创建新的类C,让C也实现A接口,那么在X类中的代码就不用动,然后在spring配置文件中配置好A和C的关系就可以了;
很方便;


回复 使用道具 举报
小手一抖  金币到手
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马